我正在开发一个 Java 程序,可以打印从 1 到 65 的所有素数。这是我的代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
for(int i=3;i<65;i++){
for (int j = 2; j <=Math.sqrt(i); j++) {
if(i%j!=0){
System.out.println(i);
}
}
}
}
}
The code provided above prints all prime numbers except 3.
If I use the code:
import java.util.*;
public class Main {
public static void main(String[] args) {
int number = 3;
boolean isPrime = true;
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
isPrime = false;
break; // Exit the loop once a divisor is found
}
}
if (isPrime) {
System.out.println(number + " is a prime number.");
} else {
System.out.println(number + " is not a prime number.");
}
}
}
然后,它给出 3 作为质数。为什么第一个代码不打印 3?
在您的代码中,请注意 j 从 2 开始迭代到 Math.sqrt(i) 的位置。当 i=3 时,Math.sqrt(i) = Math.sqrt(3) = 1.732。因为 1.732<2, the inside loop does not get executed. As a result,
if(i%j!=0){
System.out.println(i);
}
没有被处决。
Lusine Baghdasaryan 的答案是正确的。
数学.sqrt(3) = 1.7320508075688772
Math.sqrt() 返回 double 数据类型,因此与 2 比较时,Java 将其转换为以下比较:
2.0< 1.7320508075688772.
代码预定义的第二个sinppet isPrime 为true。这就是你得到结果的原因。
此外,您的素数结果不正确。
import java.util.*;
public class Main {
public static void main(String[] args) {
boolean isPrime=true;
for (int i = 3; i < 65; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0) {
isPrime = false;
}
}
if(isPrime){
System.out.println(i);
}else{
isPrime =true;
}
}
}
}