在不使用模数,除法或乘法的情况下查找素数

时间:2016-11-01 02:17:25

标签: java primes

我的作业任务的任务之一是在阵列中查找特定长度内的所有素数。但是,我无法在不使用模数或乘法或除法的情况下查找素数。任何帮助都是非常有用的。我遇到困难的部分标有"测试它是否可以被1和它自身旁边的其他数字整除。"

这是我的代码:

class A {
    public static void sieve(int [] array) {

        //List of primes
        int [] primes;
        primes = new int[1000000];

        //Setting the Array
        for(int i = 1; i < array.length; i++) {
            array[i] = i;
        }

        //Finding Primes
        System.out.println("Your primes are: ");
        for(int j = 0; j < array.length; j++) {
            boolean prime = true;
            int num = array[j];

            //Testing if it's divisible by other numbers beside 1 and itself.
            for(int n = 2; n < j; n++) {
                num -= n;
                if(num == 1) {
                    prime = false;
                }
            }

1 个答案:

答案 0 :(得分:1)

如果您需要素数列表而不使用模数,除法或乘法,则必须使用Sieve of Eratosthenes

const int SIZE=100010;
int status[SIZE]={1};
int sieve(){
    for(int i=0;i<=SIZE;i++)
        status[i]=1;

    for(int i=2;i<=SIZE;i++){
        if(status[i]==1){
            for(int j=2*i;j<=SIZE;j+=i){
                status[j]=0;
            }
        }
    }

}

int main(){
    sieve();
    //check from 2 to 100 which one is prime and which one is not prime
    for(int i=2;i<100;i++){
        if(status[i]==0)
            printf("%d NOT PRIME\n",i);
        else if(status[i]==1)
            printf("%d PRIME\n",i);
    }

}