3 条题解
-
1
#include <stdio.h> #include <math.h> #include <stdbool.h> int primes[1000010]; int cnt = 0; int main() { bool is_prime[1000010]; for (int i = 0; i <= 1000010; i++) { is_prime[i] = true; is_prime[0] = is_prime[1] = false; } for (int i = 2; i <= sqrt(1000010); i++) { if (is_prime[i]) { for (int j = i * i; j <= 1000010; j += i) { is_prime[j] = false; } } } for (int i = 2; i <= 1000010; i++) { if (is_prime[i]) { primes[cnt++] = i; } } int n; scanf("%d", &n); while (n--) { int m,num; scanf("%d", &m); if(m==1){printf("2 1\n");continue;} for(int i=0;i<=1000010;i++){ if(primes[i]<=m&&primes[i+1]>=m){ if(m-primes[i]<=primes[i+1]-m){ num=m-primes[i]; printf("%d %d\n",primes[i],num); } if(m-primes[i]>primes[i+1]-m){ num=primes[i+1]-m; printf("%d %d\n",primes[i+1],num); } break; } } } return 0; }//埃及筛,不够快可以加个二分查找,刚好卡时间过
信息
- ID
- 127
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 2367
- 已通过
- 310
- 上传者