这是函数的代码,如果输入为prime,则返回true,否则返回false。
这就是我打算如何工作:假设y = 7,循环以n = 1开始。由于1(n)小于7(y),因此循环可以迭代。程序检查y除以n是否具有0的余数,这意味着n是y的因子。如果它是真的,那么它会检查该因子是否不等于1或y(7),因为如果它们不是那么这意味着y除了它的self和1之外还有更多的因子,这意味着它不是素数,所以它应该自动结束该函数并返回false。但是因为7只有两个因子,1和7,它们要么等于1,要么自己(y),然后在循环结束后,它应该返回true。
我不明白为什么它不起作用。
public static boolean checkIfPrime(long y) {
for ( long n =1L; n <= y; n++) {
if(y%n == 0) {
if( n != 1L || n != y) {
return false;
}
}
}
return true;
}
答案 0 :(得分:2)
通过一些优化,代码就像这样
static boolean isPrime(long n){
long lim = (long) Math.sqrt(n);
if(n%2 == 0 && n != 2)
return false;
for (int i = 3; i <= lim; i=i+2)
if(n%i == 0)
return false;
return true;
}
此代码:
答案 1 :(得分:1)
在n&lt; = y中删除等于运算符。从2开始你的循环。它必须是这样的。 (长n = 2; n
答案 2 :(得分:1)
对于你想要实现的目标,我认为伪代码应如下所示:
set a flag = true;
Loop from 2 to y-1{
if(y%n==0){
flag = false
break; // Very important
}
}
check flag condition & return (if some othe computation is required) or just return flag
if(n!= 1L || n!= y):在每次迭代中不必要地添加检查条件。尽量避免它。
为什么使用标志而不是直接返回语句?只是偏好,直接回报肯定会在这种情况下起作用。