初始方法:
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<Integer> list = new ArrayList<Integer>(); 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<list.size();i++){ // int j=2; // 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"); } } }