题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=24
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
const int MAX = 1000010;
//打印素数表
void PrimeTable(int end, int *prime){
prime[1] = 1;prime[0] = 1;
for(int i=2; i<= sqrt(end) + 1; ++i)
if(!prime[i])
for(int j = i*i; j <= MAX; j += i)
prime[j] = 1;
}
int main()
{
int n;
int t;
int prime[MAX] = {0};
cin>>t;
PrimeTable(MAX, prime);
while(t--){
cin>>n;
int left = n;
int right = n;
int maxdistance = 0;
while(prime[left] && left >= 0)
--left;
while(prime[right] && right < MAX)
++right;
maxdistance = left < 0 ? right: ((n-left)-(right-n)) <= 0 ? \
left: right;
cout<<maxdistance<<" "<<abs((float)(maxdistance - n))<<endl;
}
return 0;
}