素数判别算法

素数筛选法

原理就是当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 }

 

posted @ 2014-09-15 00:13  bournet  阅读(501)  评论(0编辑  收藏  举报