在Java中,我错过了什么?素数在2到100之间(初学者)

时间:2014-08-09 18:39:40

标签: java

public class Prime {
public static void main(String args[]){
    int x;

    for(x=2; x < 100; x++){
        if((x % 2)> 0){
            System.out.println(x);
        }
    }
}

}

我用复合数字得到3,5,7,9,11等 只有素数

而不是3,5,7,11等

我可能无法掌握编码的想法。

3 个答案:

答案 0 :(得分:3)

 x % 2 > 0

不是检查天气数量是否为素数的条件

你需要无法将N除以0提醒,从2到sqrt(N)


答案 1 :(得分:2)

if((x % 2)> 0)不是检查素数的条件。它会在除法后给出余数,这里告诉它是奇数还是偶数。只是奇数不是素数的条件,因为它也可能有其他奇数因素,例如。 21 = 7 * 3。

这是一个简单的java代码,用于获取0到100之间的所有素数。注释中提到的解释

class Main {
    public static void main(String[] args) {
        for (int n = 2; n <= 100; n++) { // loop for all numbers
            boolean flag = true; // to check if factors other than 1, n
            for (int f = 2; f <= Math.sqrt(n); f++) {
                if (n % f == 0) { // factor found, hence not prime
                    flag = false; // activate flag
                    break; // break
                }
            }
            if (flag) { // if flag is not re set
                System.out.print(n + ", "); // print n
            }
        }
    }
}

输出:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 

如果您也在寻找效率,请执行Sieve of Eratosthenes

class Main {
    public static void main(String[] args) {
        int N = 100;

        // Array to keep record of primes and non primes,
        // 0 - prime, 1 - composite
        int[] arr = new int[N + 1];
        arr[0] = arr[1] = 1;

        // loop from 2 to square root of N
        for (int i = 2; i <= Math.sqrt(N); i++) {

            // check if currently prime
            if (arr[i] == 0) {

                // add all factors of i to composite numbers upto N
                for (int j = i * i; j <= N; j += i) {
                    arr[j] = 1;
                }
            }
        }

        // Print all positions for which fields are not reset
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 0) {
                System.out.print(i + ", ");
            }
        }
    }
}

输出:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 

答案 2 :(得分:0)

如果你只是想要完成工作&#34;不必考虑它背后的逻辑,有一个很好的&#34; hack&#34;在java中,您可以使用正则表达式检查数字是否为素数:

(对不起,但是我不记得我发现了哪个Thread,当我在java中研究主要计算时)

//################################################################# isPrimeRegEx #
public boolean isPrime(int n) {
    return !new String(new char[n]).matches(".?|(..+?)\\1+");
}

如果你想学习真正的素数计算和效率背后的逻辑,我深深建议你从这个线程开始:

Finding prime numbers with the Sieve of Eratosthenes (Originally: Is there a better way to prepare this array?)

编辑:

在您的情况下,您可以替换

if((x % 2)> 0)

,正如大多数人正确指出的那样,只是做一个模数(%2表示&#34;剩余的除法通过2&#34;)并查看该余数是否大于0(意味着表达式将为真如果x是奇数),用

if(isPrime(x))