エラトステネスの篩のメリットがわかりません。
素数判定ロジックについての実装をしています。
質問
これら2つを見たときにエラトステネスの篩のメリットがわかりません。
- 整数n分のメモリが必要
- nが大きくなったときに対応できない
- 単一のクエリに関しては明らかに後者の実装の判定のが早そう
以上のようなことを感じました。
複数クエリに対応する場合にメリットがあるという認識でよろしいでしょうか?
ご回答いただけると幸いです。
エラトステネスの篩
C++
1// エラトステネスの篩, 素数かどうかの配列を作る 2vector<bool> prime_array(100005, true); 3 prime_array[0] = false; 4 prime_array[1] = false; 5 for(int i=2; i*i<=100000; i++) { 6 if(!prime_array[i]) continue; 7 // 素数のn倍(n>1)に関してはfalseにする 8 for(int j=i*2; j<=100000; j+=i) { 9 prime_array[j] = false; 10 } 11 }
こちらが単純な素数判定(O(√n))
c++
1bool IsPrime(long long num) 2{ 3 if (num < 2) return false; 4 else if (num == 2) return true; 5 else if (num % 2 == 0) return false; // 偶数はあらかじめ除く 6 double sqrtNum = sqrt(num); 7 for (long long i = 3; i <= sqrtNum; i += 2) 8 { 9 if (num % i == 0) 10 { 11 // 素数ではない 12 return false; 13 } 14 } 15 // 素数である 16 return true; 17} 18 19
回答2件
あなたの回答
tips
プレビュー