5 条题解
-
1
懒得用线性筛和埃氏筛
详细请见题解 - 【苏州NOI】d029: 求出2-100000之间的所有质数(素数) - TZHSOJ
#include <stdlib.h> #include <stdio.h> int n; int pow(int x, int y, int z) { int res = 1; for(; y; y >>= 1) { if(y & 1) res = (res % z * x % z) % z; x = (x % z * x % z) % z; } return res; } int MillerRabin(int x) { int q = x - 1, k = 0; while(!(q & 1)) { q >>= 1; k++; } int a = rand() % (x - 2) + 2; if(pow(a, q, x) == 1) return 1; for(int i = 0; i < k; i++) { if(pow(a, q, x) == x - 1) return 1; q <<= 1; } return 0; } int test(int x) { if(x == 2) return 1; for(int i = 1; i <= 10; i++) { if(!MillerRabin(x)) return 0; } return 1; } int main() { scanf("%d", &n); for(int i = 2; i <= n; i++) { if(test(i)) printf("%d\n", i); } return 0; }
信息
- ID
- 104
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 208
- 已通过
- 82
- 上传者