[英]What is wrong with my isPrime method?
This is my isPrime
method:这是我的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;
}
I put isPrime(9)
and it returns true
.我把isPrime(9)
和它返回true
。 What is wrong with the method?方法有什么问题?
Your condition should be i * i <= num你的条件应该是 i * i <= 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;
}
You didn't take number 9 in your consideration so 9<9 will result false.您没有考虑数字 9,因此 9<9 将导致错误。 But you need to check 9.但是你需要检查9。
my sample:我的样本:
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;
}
Java 8: (Example with lambda expression and streams) Java 8:(使用 lambda 表达式和流的示例)
public static boolean isPrimeFunctionalStyle(int number) {
return number > 1 &&
IntStream.rangeClosed(2, (int) Math.sqrt(number))
.noneMatch(i -> number % i == 0);
}
Here are some hints:这里有一些提示:
The main bug is that you never check divisibility by sqrt(num)
due to an off-by-one error in the loop.主要的错误是,由于循环中的一对一错误,您永远不会检查sqrt(num)
可整性。
The other bug is that you don't consider 2
to be prime (which it is).另一个错误是你不认为2
是素数(它是)。
Change your code like this ( check condition) :像这样更改您的代码(检查条件):
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;
}
(Late) 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;
}
This code is missing 2
;此代码缺少2
; 2
is a primenumber. 2
是素数。 Everything dividable by 2
isn't, except the 2
- so, use:可被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;
}
i * i < num
的循环条件应该是i * i <= num
循环永远不会执行,所以它直接返回真
The loop does not run.循环不运行。 It gets terminated in the very first value of i because 3 x 3 = 9 it does not meet the condition i * i < n它在 i 的第一个值处终止,因为 3 x 3 = 9 它不满足条件 i * i < n
for (int i = 3; i * i < num; i += 2)
if (num % i == 0) return false;
i * i
is 9, and 9 in not less than 9, thus for loop is not run. i * i
为 9,且 9 不少于 9,因此不会运行 for 循环。
you can simply use if and else statement to check to see if the number is prime.您可以简单地使用 if 和 else 语句来检查数字是否为素数。 There is a pattern, all the numbers are either multiples of either 2 or 3 once your number reach certain limits.有一种模式,一旦您的数字达到特定限制,所有数字要么是 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;
}
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;
}
package Prime;
import javax.swing.*;
import java.util.Scanner;
public class Prime {
// main method
public static void main(String[] args) {
// declare lower bound and upper bound variables and get their values
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a Lower Bound number: ");
int lowerBound = scanner.nextInt();
System.out.print("Enter an Upper Bound number: ");
int upperBound = scanner.nextInt();
int counter;
if ((lowerBound <= 0) || (upperBound <= 0)) {
System.out.println("Bounds must be greater than 0, Invalid Bounds");
} else if (upperBound < lowerBound) {
System.out.println("Upper bound cannot be less than lower bound, Invalid Bounds\nProgram terminating.");
} else {
// loop from lower bound to upper bound
System.out.println("The Prime numbers are: ");
for (counter = lowerBound; counter <= upperBound;
counter++) {
// if prime number, display in primeNumbersJTextArea
if (isPrime(counter)) {
System.out.print(counter + ", ");
}
} // end for loop
} // end else
} // end method calculatePrimesJButtonActionPerformed
// method to determine if a number is a Prime number?
private static boolean isPrime(int number) {
// number 1 is not a Prime number
if (number == 1)
return false;
int limit = (int) Math.sqrt(number);
for (int counter = 2; counter <= limit; counter++) {
if (number % counter == 0) {
return false;
}
}
return true;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.