素数判别算法
素数筛选法
原理就是当i是素数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质数的倍数筛掉。算法实现
1 #include <iostream> 2 #include <math.h> 3 using namespace std; 4 5 int main() 6 { 7 int N = 1000000; 8 //prime用来保存下标i是否是素数 9 bool prime[N+1]; 10 //初始化,偶数(除了2)都是合数 11 for (int i = 0; i < N; i++) 12 { 13 if (i%2 == 0 && i != 2) 14 prime[i] = false; 15 else 16 prime[i] = true; 17 } 18 19 for (int i = 3; i <= sqrt(N); i += 2) 20 { 21 //若i不是素数,则i的倍数都不是素数 22 if (prime[i]) 23 for (int j = i+i; j <= N; j += i) 24 prime[j] = false; 25 } 26 27 for (int i = 2; i <= N; i++) 28 { 29 if (prime[i]) 30 cout << i << endl; 31 } 32 33 return 0; 34 }