打表法求素数距离

来源:互联网 发布:全网营销推广软件 编辑:程序博客网 时间:2024/04/28 23:35

题目: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;}


原创粉丝点击