超级素数幂

超级素数幂_第1张图片

初始方法:

package zg1;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Maths {

public static void main(String[] args) {
// TODO Auto-generated method stub
int num, num1, flag = 0;
Scanner sc = new Scanner(System.in);
num = sc.nextInt();
sc.close();
num1 = (int) Math.sqrt(num);// 因为q大于等于2,所以开根号。
List list = new ArrayList();
for (int i = 2; i <= num1; i++) {// num1可能也是素数。
for (int j = 2; j <= i; j++) {
if (i % j == 0 && i != j) {
break;
}
if (i % j == 0 && i == j && (num % i == 0)) {
list.add(i);
}
}
}
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
int j = 2;
if (num % list.get(i) != 0) {// 规律,不能被num整除的数直接排除。
continue;
}
while (Math.pow(list.get(i), j) < num) {
j++;
}
if (Math.pow(list.get(i), j) == num) {
System.out.println(list.get(i) + " " + j);
flag = 1;
break;
}
}
if (flag == 0) {
System.out.println("NO");
}
}

}
改进方法:

package zg;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Maths {

public static void main(String[] args) {
// TODO Auto-generated method stub
int num,num1,num2=0,flag=0;//flag是否找到。
Scanner sc = new Scanner(System.in);
num = sc.nextInt();
sc.close();
num1 = (int)Math.sqrt(num);//因为q大于等于2,所以开根号。
for(int i = 2; i <=num1&& flag==0; i++){//num1可能也是素数。
for(int j = 2 ; j<=i; j++){
if(i%j==0 && i!= j){
break;
}
if(i%j==0 && i== j&&(num%i==0)){//规律,不能被num整除的数直接排除,并且第一个满足条件的数据要么就是要找的数要么不是,题目中暗含的信息说明只有一个解或者没有。
flag=1;
num2=i;
break;
}
}
}
if(flag==1){
int num3=(int)(Math.log(num)/Math.log(num2));
if(Math.pow(num2,num3)==num){
System.out.println(num2+" "+num3);
}else{
flag=0;
}

}
// System.out.println(list);
// for(int i=0;i // int j=2;
// while(Math.pow(list.get(i),j) // j++;
// }
// if(Math.pow(list.get(i),j)==num){
// System.out.println(list.get(i)+" "+j);
// flag=1;
// break;
// }
// }
if(flag==0){
System.out.println("NO");
}
}

}

你可能感兴趣的:(超级素数幂)