要得到自然数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 }
原文地址:https://www.cnblogs.com/dameidi/p/9313461.html
时间: 2024-10-11 23:48:59