打印从1到65的素数的代码是使用Java打印除3之外的所有素数。为什么会这样?

问题描述 投票:0回答:3

我正在开发一个 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?

java primes
3个回答
0
投票

在您的代码中,请注意 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);
    }

没有被处决。


0
投票

Lusine Baghdasaryan 的答案是正确的。

数学.sqrt(3) = 1.7320508075688772

Math.sqrt() 返回 double 数据类型,因此与 2 比较时,Java 将其转换为以下比较:

2.0< 1.7320508075688772.

代码预定义的第二个sinppet isPrime 为true。这就是你得到结果的原因。

此外,您的素数结果不正确。


0
投票
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;
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.