素数的判断:
1 #include<math.h>
2 bool IsPrime(int n)
3 {
4 if(n <= 1)
5 return false;
6 int sqr = (int)sqrt(1.0*n);
7 for(int i=2; i<=sqr; i++)
8 if(n%i==0) return false;
9 return true;
10 }
获取素数表:
1 const int M=101;
2 vector<int> prime;
3 bool isPrime[M]={0};
4
5 void FindPrime()
6 {
7 for(int i=1; i<M; i++)
8 if(IsPrime(i))
9 {
10 prime.push_back(i);
11 isPrime[i] = 1;
12 }
13 }
埃氏筛法(Eratosthenes):
1 #include<cstdio>
2 #include<algorithm>
3 using namespace std;
4 const int M=101;
5 int isPrime[M];
6
7 void Eratosthenes()
8 {
9 fill(isPrime, isPrime+M, 1);
10 isPrime[0]=0;
11 isPrime[1]=0;
12 for(int i=2; i<M; i++)
13 if(isPrime[i] == 1)
14 {
15 printf("%d ", i);
16 for(int j=2*i; j<M; j+=i)
17 isPrime[j] = 0;
18 }
19
20 }
21
22 int main()
23 {
24 Eratosthenes();
25 return 0;
26 }
- 时间复杂度:O( Nlog(logN) )
- 第一个测出地球周长的男人-。-
欧氏筛法(Euler):
1 #include<cstdio>
2 #include<vector>
3 using namespace std;
4 const int M=110;
5 int isPrime[M];
6
7 void Euler()
8 {
9 fill(isPrime, isPrime+M, 1);
10 isPrime[0]=0;
11 isPrime[1]=0;
12 vector<int> prime;
13 for(int i=2; i<M; i++)
14 {
15 if(isPrime[i])
16 {
17 prime.push_back(i);
18 printf("%d ", i);
19 }
20 for(int j=0; j<prime.size(); j++)
21 {
22 if(i*prime[j] > M)
23 break;
24 isPrime[i*prime[j]] = 0;
25 if(i%prime[j] == 0)
26 break;
27 }
28 }
29 }
30
31 int main()
32 {
33 Euler();
34 return 0;
35 }
- 时间复杂度:O(N)
- 欧拉待过的俄法德,都曾是世界最强的国家,如果当初欧拉来中国,是不是咱们就年年ACM总冠军了-。-