(数论 欧拉筛法)51NOD 1181 质数中的质数(质数筛法)
如果一个质数,在质数列表中的编号也是质数,那么就称之为质数中的质数。例如:3 5分别是排第2和第3的质数,所以他们是质数中的质数。现在给出一个数N,求>=N的最小的质数中的质数是多少(可以考虑用质数筛法来做)。
Input
输入一个数N(N <= 10^6)
Output
输出>=N的最小的质数中的质数。
Input示例
20
Output示例
31
解:
最初版本 15 ms 9812 KB
1 #include <stdio.h> 2 #define MAXN 2000000 3 int vis[MAXN]={1,1}, pri[MAXN]; 4 5 int phi(int n) 6 { 7 for (int i = 2, m = 0; i < MAXN; i++) 8 { 9 if (vis[i] == 0) 10 { 11 pri[m++] = i; 12 if (i >= n && vis[m] == 0) return pri[m - 1]; 13 } 14 for (int j = 0; j < m; j++) 15 { 16 if (i * pri[j] > MAXN) break; 17 vis[i * pri[j]] = 1; 18 if (i%pri[j] == 0) break; 19 } 20 } 21 } 22 23 int main() 24 { 25 int n; 26 while (scanf_s("%d", &n) != EOF) printf("%d\n", phi(n)); 27 return 0; 28 }
卡数据范围 15 ms 5904 KB
1 #include <stdio.h> 2 #define MAXN 1000200 3 int vis[MAXN]={1,1}, pri[78510]
变数据类型 15 ms 2976 KB
1 #include <stdio.h> 2 #define MAXN 1000200 3 char vis[MAXN]={1,1}; 4 int pri[78510]