6 条题解
-
0
一次性统计完所有数字对应的孪生素数对数,这样就不需要每次重新循环统计。
#include <cstdio> const int MAXN = 1000010; bool isPrime[MAXN]; int twinPrimes[MAXN]; int fillIsPrime(){ for(int i = 2; i <= MAXN; i++){ isPrime[i] = true; } for(int i = 2; i <= MAXN; i++){ if(isPrime[i]){ for(int j = 2 * i; j <= MAXN; j += i){ isPrime[j] = false; } } } return 0; } int main(){ fillIsPrime(); int n, m, rec = 1; scanf("%d", &n); twinPrimes[0] = 0; twinPrimes[1] = 0; twinPrimes[2] = 0; for(int i = 3; i <= 1000010; i ++){ if(isPrime[i] && isPrime[i - 2]){ rec ++; } twinPrimes[i] = rec; } for(int i = 1; i <= n; i ++){ scanf("%d", &m); printf("%d\n", twinPrimes[m]); } return 0; }
信息
- ID
- 128
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 1638
- 已通过
- 222
- 上传者