标签:color 筛法 欧拉 while can div bsp ext phi
第1行:一个数N,表示正整数的数量。(1 <= N <= 1000) 第2 - N + 1行:每行1个数(2 <= S[i] <= 10^9)
输出共N行,每行为 Yes 或 No。
5 2 3 4 5 6
Yes Yes No Yes No
解:先使用欧拉筛法找到(int)sqrt(1e9)+1=31623以前的所有质数,再使用这些质数判断之后数字的是否为质数。本题可以只找到5000以前的所有质数,但我觉得这么做不严谨。
1 #include <stdio.h> 2 #define MAXN 31623 3 4 int vis[MAXN], pri[MAXN], m = 0; 5 6 void phi() 7 { 8 vis[0] = vis[1] = 0; 9 for (int i = 2; i < MAXN; i++) 10 { 11 if (!vis[i]) pri[m++] = i; 12 for (int j = 0; j < m; j++) 13 { 14 if (i*pri[j] > MAXN) break; 15 vis[i*pri[j]] = 1; 16 if (i%pri[j] == 0) break; 17 } 18 } 19 return; 20 } 21 22 int main() 23 { 24 int n; 25 phi(); 26 while (scanf_s("%d", &n) != EOF) 27 { 28 while (n--) 29 { 30 int temp; 31 scanf_s("%d", &temp); 32 if (temp < MAXN) 33 printf("%s\n", vis[temp]? "NO" : "YES"); 34 else 35 { 36 int flag = 0; 37 for (int j = 0; j < m; j++) 38 if (temp % pri[j] == 0) 39 { 40 flag = 1; 41 break; 42 } 43 printf("%s\n", flag ? "NO" : "YES"); 44 } 45 } 46 } 47 }
标签:color 筛法 欧拉 while can div bsp ext phi
原文地址:https://www.cnblogs.com/Ekalos-blog/p/9716087.html