筛选eratosthenes java

时间:2018-02-11 09:59:49

标签: java primes sieve-of-eratosthenes

我正在尝试编写一个实现eratosthenes筛选的程序。我可以从2到任何给定的结束编号,但我们正在处理的任务要求我们输入起始值。我完全卡住了。我尝试了很多不同的代码,但它一直给我奇怪的答案。

我的开始是起始值,结束是结束值。我基本上想找到这个范围的素数。谢谢!!!

    public static void sieve(int start, int end) {
    int size=(end-start)+1;
    boolean result[]=new boolean[size];
    int prime[]=new int[size];

    for(int i=0; i<size; i++) {
        prime[i]=start+i;
    }


    for(int i=0; i<size; i++) { //every number in result is true
        result[i]=true;
    }

    for(int p=2; p*p <size; p++) {
        if(result[p]==true) {
            for(int i=p*2; i<size; i +=p) {
                result[i]=false;
            }
        }

        for(int i=2; i<size; i++) {
            if(result[i]==true) {
                System.out.print(prime[i] + " ");

            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Eratosthenes的筛子的工作原理是将每个素数的倍数标记为非素数,从第一个素数2开始。

因此,即使您需要在startend之间找到素数,您仍然需要找到2和end之间的所有素数。执行此操作后,只需输出所请求范围内的素数。