【发布时间】:2017-11-21 02:14:11
【问题描述】:
这是一个函数的代码,如果输入是素数,它应该返回 true,如果不是,则返回 false。
这就是我打算让它工作的方式:假设 y = 7,循环从 n=1 开始。由于 1(n) 小于 7(y),因此循环可以迭代。程序检查 y 除以 n 的余数是否为 0,这意味着 n 是 y 的因数。如果为真,则检查因子是否不等于 1 或 y (7),因为如果它们不等于,则表示 y 除了自身和 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;
}
【问题讨论】:
-
n != 1L || n != y只能在y == 1L时为假。 -
尝试以 2 开始 for 并以 n
-
@shmosel 为什么说 shmosel,我不明白。因为如果在第一次迭代中 y = 7 n = 1 所以 y%n = 0。并且由于 n =1 这意味着 n != 1L 是错误的,这意味着 (n != 1L || n != y) 也是错误的.我的推理不正确吗?
-
@Saurabh 感谢您的意见,但您能解释一下原因吗?
-
(false || true) == true
标签: java math primes prime-factoring