素数生成算法

来源:互联网 发布:rolling girl动作数据 编辑:程序博客网 时间:2024/05/29 17:12

素数生成问题,解法主要分为试除法和筛选法两种,筛选法里又有很多算法,这里各实现一种比较方便且容易理解的方法,用来生成1到n之间的素数。

1.试除法

bool IsPrime(int num){if(num < 2)return false;if(num == 2)return true;if(num % 2 == 0)return false;for(int i = 3; i <= sqrt(num); ++i){if(num % i == 0)return false;}return true;}void MakePrime(int n){for(int i = 1; i < n + 1; ++i){if(IsPrime(i))cout << i << " ";}cout << endl;}

2.筛选法

先声明一个大小为n+1的bool数组,先把下标为奇数的声明为true,下标为偶数的声明为false。然后对于素数,它的倍数全都声明为false,剩下的为true的数组下标即为素数。

void MakePrime(int n){bool prime[n+1] = {false};prime[2] = true;for(int i = 3; i < n+1; i += 2)prime[i] = true;for(int i = 3; i <= sqrt(n); i += 2){if(prime[i]){for(int j = 2*i; j < n+1; j += i)prime[j] = false;}}//打印for(int k = 1; k < n+1; ++k){if(prime[k])cout << k << " ";}cout << endl;}



0 0
原创粉丝点击