一道编程题。把一个数分解成质数的q次方
慕容天河 2017-03-07 09:40:26 题目如下:
一个正整数n(2<=n<=10^18).如果n可以分解成p^q,其中p为质数且q为大于1的整数,则输出p,q。否则输出NO
例如:
输入 27
输出 3 3
以下是我的源码:
import java.util.Scanner;
public class ArrayTest {
public static boolean isPrimer(int i){
if(i<2){
return false;
}else{
if(i==2||i==3)
return true;
for(int j=2;j<=Math.sqrt(i);j++){
if(i%j==0)
return false;
}
return true;
}
}
private static double sqrtn(double d, double i) {
i=1/i;
return Math.pow(d, i);
}
public static int sup(int i){
for(int j=2;j<=18;j++){
double ans = sqrtn(i,j);
int ians = (int)ans;
if(ans-ians==0){
if(isPrimer(ians)){
return j;
}
}
}
return -1;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
int q = sup(i);
if(q==-1){
System.out.println("NO");
}else{
int p = (int)sqrtn(i,q);
System.out.println(p+" "+q);
}
}
}
感觉没有错,输入了几组数据也是对的。为什么提交时候提示我测试用例仅通过10%...求大神告知哪里错了,哪些情况没有考虑到。感谢!