1:题目:
判断是否只有三个因子
,
小度学数学时遇到困难,请你帮帮他。 我们知道,恰好有两个正因子的数是质数。现在小度突发奇想,他想判断一个数是不是恰好有三个因子?
给定n个正整数,请你分别判断它们是否恰好有三个不同的正因子。 格式 输入格式:第-行包含一个整数n(1 < n≤105),示数字个数。
接下来n行,每行包含一个正整数a:(1 ≤ai≤1012)。 输出格式:共n行,每行一个YES或NO, 示a;是否恰好有三个不同的正因子
样例1 输入: 34 5 6 输出: YES NO
NO
2:过程:
2.1:思考:
三个因数,很少,我们可以排查确定!
我们思考一下,除了1之外,所有的数一定有两个因数——1和本身!
而另外一个哪里来呢?没错就是一个数的平方,是一个因数!
那么稍微转换一个,满足这样条件的是不是那个因数必须是素数?
目标确定,就可以写代码了
2.2:代码:
public class DEMO {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// code here
int count=input.nextInt();
long[] nums=new long[count];
for(int i=0;i<nums.length;i++){
nums[i]=input.nextLong();
}
for(int i=0;i<nums.length;i++){
boolean b=is(nums[i]);
if(b==false)
System.out.println("NO");
else
System.out.println("YES");
}
input.close();
}
public static boolean is(long n) {
if (n == 1) return false;
else {
long tmp = (long) sqrt(n);
//开方不为整数就丢掉,这一步非常重要,可以节约非常大的计算量
if (pow(tmp, 2) != n) return false;
//判定素数
for (long i = 2; i < sqrt(tmp); i++) {
if (n % i == 0) return false;
}
return true;
}
}
}
3:后言:
希望大家一起学习一起进步!