这是我的isPrime
方法:
private static boolean isPrime(int num) {
if (num % 2 == 0) return false;
for (int i = 3; i * i < num; i += 2)
if (num % i == 0) return false;
return true;
}
我放isPrime(9)
并返回true
。该方法有什么问题?
答案 0 :(得分:35)
您的情况应该是i * i&lt; = num
private static boolean isPrime(int num)
{
if (num == 2)
return true;
if (num < 2 || num % 2 == 0)
return false;
for (int i = 3; i * i <= num; i += 2)
if (num % i == 0)
return false;
return true;
}
你没有在考虑中使用9号,因此9&lt; 9将导致错误。但你需要检查9。
答案 1 :(得分:5)
我的样本:
public boolean isPrime(int x) {
if (x==1) {
return true;
} else {
for(int i=2;i<=Math.sqrt(x);i++) {
if (x%i==0) return false;
}
return true;
}
答案 2 :(得分:3)
Java 8 :(使用lambda表达式和流的示例)
public static boolean isPrimeFunctionalStyle(int number) {
return number > 1 &&
IntStream.rangeClosed(2, (int) Math.sqrt(number))
.noneMatch(i -> number % i == 0);
}
答案 3 :(得分:2)
以下是一些提示:
主要的错误是,由于循环中有一个错误的错误,您永远不会通过sqrt(num)
检查可分性。
另一个错误是你不认为2
是素数(它是)。
答案 4 :(得分:2)
像这样更改你的代码(检查条件):
private static boolean isPrime(int num) {
if (num == 2) return true;
if (num % 2 == 0)
return false;
for (int i = 3; i * i <= num; i += 2)
if (num % i == 0) return false;
return true;
}
答案 5 :(得分:2)
(已晚)Sidenode:
private static boolean isPrime(int num) {
if (num % 2 == 0) return false;
for (int i = 3; i * i < num; i += 2)
if (num % i == 0) return false;
return true;
}
此代码遗失2
; 2
是一个主要数字。由2
除外的所有内容都不是,2
除外 - 所以,请使用:
private static boolean isPrime(int num) {
if (num == 2) return true;
if (num % 2 == 0) return false;
for (int i = 3; i * i < num; i += 2)
if (num % i == 0) return false;
return true;
}
答案 6 :(得分:0)
i * i < num
的循环条件应为i * i <= num
答案 7 :(得分:0)
循环永远不会被执行,所以它直接返回
答案 8 :(得分:0)
循环不运行。它在i的第一个值中终止,因为3 x 3 = 9 它不符合条件i * i&lt; Ñ
答案 9 :(得分:0)
for (int i = 3; i * i < num; i += 2)
if (num % i == 0) return false;
i * i
为9,而9不小于9,因此循环不会运行。
答案 10 :(得分:0)
你可以简单地使用if和else语句来检查数字是否为素数。有一种模式,一旦数量达到一定限度,所有数字都是2或3的倍数。
public static boolean isPrime2 (int n)
{
if (n == 1) {
return false;
} else if (n == 2 || n==3) {
return true;
} else if (n>2) {
if(n % 2 ==0 || n % 3 == 0) {
return false;
}
}
return true;
}
答案 11 :(得分:0)
public static boolean isPrime (int number) {
if(number < 2) {
return false;
}
int check = (int) Math.sqrt(number);
for(int i = 2; i <= check; i++) {
if(number % i == 0) {
return false;
}
}
return true;
}
答案 12 :(得分:0)
psql