1. 程式人生 > >埃拉托斯特尼--篩法 c++求質數,用bitset類型

埃拉托斯特尼--篩法 c++求質數,用bitset類型

width src dac https ati dsta 質數 abs tar

要得到自然數n以內的全部素數,必須把不大於技術分享圖片 的所有素數的倍數剔除,剩下的就是素數。 給出要篩數值的範圍n,找出以內的素數。 1既不是質數也不是合數,去掉; 先用2去篩,即把2留下,把2的倍數剔除掉; 再用下一個質數,也就是3篩,把3留下,把3的倍數剔除掉; 接下去用下一個質數5篩,把5留下,把5的倍數剔除掉;不斷重復下去......。 主要用到bitset類型
 1 #include<iostream>
 2 #include<string>
 3 #include<bitset>
 4 #include<cmath>
 5 
 6 using
namespace std; 7 int main() 8 { 9 int const max_number(32); 10 int const max_test((int)sqrt((double)max_number)); 11 bitset<max_number + 1> number; 12 number.set(); 13 number[1] = 0; 14 for (int i(1); i!=max_test; ++i) 15 { 16 if (number[i]){ 17 //
篩掉倍數 18 for (int j(i*i); j <max_number + 1; j += i) 19 { 20 number[j] = 0; 21 } 22 } 23 } 24 cout << "The number of the primes less than " << max_number + 1 25 << "is" << number.count() << endl;
26 for (int i(1); i != max_number + 1; ++i) 27 { 28 if (number[i]) cout << i << ","; 29 } 30 cout << endl; 31 system("pause"); 32 }

埃拉托斯特尼--篩法 c++求質數,用bitset類型