素数程序不起作用

Prime number program does not work

我正在尝试在 Java 中制作一个简单的程序,它将输出所有素数(跳过数字 2)直到数字 n。它不起作用,我没有想法。如果有人可以看一下我的代码并告诉我问题出在哪里,我将不胜感激。

public class PrimeNum {

    public static void main(String[] args) {
        int n = 50;
        int notAPrime = 0;

        System.out.println("All prime numbers before number " +n+ " are : ");
        for(int i = n; i > 2; i--){
            for(int j = 2; j < i; j++){
                if(i % j == 0){
                  notAPrime++;
                }
            }
            if(notAPrime == 0){
                System.out.println(i);
                notAPrime = 0;  
            }       
        }
    }
}

您的 for 循环中缺少 "break"。

public class primeNum {

    public static void main(String[] args) {
        int n=50;
        int notAPrime=0;

        System.out.println("All prime numbers before number " +n+ " are : ");
        for(int i=n; i>2; i--){
           for(int j=2; j<i; j++){
               if(i%j==0){
                  notAPrime++;
                  break; //your program is missing this statement
               }
            } 
            if(notAPrime==0){
               System.out.print(i + " ");                   
            }   
            notAPrime=0;     //In your program it is inside the if statement which makes it incorrect.
        }
    }
}

输出: 数字 50 之前的所有质数是: 47 43 41 37 31 29 23 19 17 13 11 7 5 3

您可以通过进行以下更改来提高程序的效率:

public class primeNum {

    public static void main(String[] args) {
        int n=50;
        int notAPrime=0;

        System.out.println("All prime numbers before number " +n+ " are : ");
        for(int i=n; i>2; i--){
           if(i%2==0){
               continue;
           }
           for(int j=3; j<i; j+=2){  
               if(i%j==0){
                  notAPrime++;
                  break;
               }
            } 
            if(notAPrime==0){
               System.out.print(i + " ");                   
            }   
            notAPrime=0;     
        }
    }
}

只需在 for(int i = n; i > 2; i--) 内声明 notAPrime 使其成为本地的每个 i - 候选素数。 现在你增加 notAPrime 并且永远不会将其重置为零。

试试这个

public class primeNum {

public static void main(String[] args) {
    int n = 50;
    boolean prime;

    System.out.println("All prime numbers before number " +n+ " are : ");
    for(int i = n; i > 2; i--){
        prime = true;
        for(int j = 2; j < i; j++){
            if(i % j == 0){
              prime = false;
            }
        }
        if(prime){
            System.out.println(i);
        }
    }
}

}

请注意,我将您的 "notAPrime" 变量从 int 更改为 boolean 并更改为一个可以告诉您其含义的名称。如果你只增加 "notAPrime" 整数,你永远不会得到任何想要的结果。 顺便说一下,这是一个 修补程序 ,您得到了更正的代码的第一种形式。请记住,2 也是质数,您的代码会忽略它。 再多做一点 ;)