2016-11-01 1 views
2

私の宿題の課題の1つは、配列内の特定の長さ内のすべての素数を見つけることでした。しかし、モジュラスや乗算、除算を使用せずに素数を見つけようとするのは難しいです。どんな助けでも大いに義務づけられます。私が難しい部分は、「それが1とそれ以外の数字で割り切れるかどうかをテストする」とマークされています。モジュラス、除算、または乗算を使用せずに素数を見つける

は、ここに私のコードです:あなたはSieve of Eratosthenesを使用する必要がモジュラス、除算、または乗算を使用せずに、素数のリストが必要な場合は

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; 
       } 
      } 
+4

なぜモジュラス/除算/乗算を避けていますか?それは必須条件ですか?もしそうなら、私は彼らがあなたに数字のふるいを実行してもらいたいと思っています。例えばEratosthenesアルゴリズムの篩 - https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes –

+0

はい!加算と減算のほかに算術演算子を使用しないようにする必要があり、プログラムの一部がSieveを作成しています。 – solorzke

答えて

1

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); 
    } 

} 
関連する問題