先利用筛法完成素数打表
再从小到大判断即可
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> using namespace std; const int Max = 1e6 + 50; int n; int isPrime[Max]; int tblPrime[Max]; int lenPrimes; void initTblOfPrime() { memset(isPrime, 1, sizeof(isPrime)); isPrime[0] = isPrime[1] = 0; for(int i = 2; i < sqrt(Max*1.0); i ++) { if(isPrime[i]){ for(int j = i*i; j < Max; j += i) { isPrime[j] = 0; } } } lenPrimes = 0; for(int i = 2; i < Max; i ++) { if(isPrime[i]) tblPrime[lenPrimes++] = i; } } int main() { int x; initTblOfPrime(); //for(int i = 0; i < 10; i ++) cout<<tblPrime[i]<<' '; scanf("%d", &n); while(n --) { scanf("%d", &x); if(x == 0) { printf("%d %d\n", 2, 2); } else { int tmp = 0, tag = 0; if(x > 0) tmp = 1; else{ tmp = -1; x = -1 * x; } for(int i = 0; i < lenPrimes; i ++) { if(x+tblPrime[i] < Max && isPrime[x+tblPrime[i]]){ tag = 1; if(tmp == 1) printf("%d %d\n", x+tblPrime[i], tblPrime[i]); else printf("%d %d\n", tblPrime[i], x+tblPrime[i]); } if(tag) break; } if(!tag) printf("FALT\n"); } } return 0; }
hdu 4715 素数打表
时间: 2024-10-22 21:20:06