素数距离问题(水题一个)

(1)类型:数学素数。
(2)题目: Description
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
Input
第一行给出测试数据组数N,
接下来的N行每行有一个整数M,
Output
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
Sample Input
3
6
8
10
Sample Output
5 1
7 1
11 1

(3)解题思路:这题和一般的素数筛问题没什么区别,初始值n也是很大。利用素数筛就可以降低复杂度了。
(4)时间复杂度:O(n)。
(5)总结:此题唯一有的小巧妙的地方就是距离的计算上,其他没有特别之处。
(6)代码:

#include
#include
const int MAX_N=1000000+6;
using namespace std;
int isprime[MAX_N+1];
void prime(int n){
    memset(isprime,true,sizeof(isprime));
    isprime[0]=0;isprime[1]=0;
    for(int i=2;i<=MAX_N;i++)
        if(isprime[i])
            for(int j=2*i;j0; 
} 
int main(){
    ios::sync_with_stdio(false);cin.tie(0);
    int i,T,n;cin>>T;
    prime(MAX_N);
    while(T--){
        cin>>n;
        int l1=-1e9,r1=1e9;
        for(i=n;i>=2;i--)
            if(isprime[i]){l1=i;break;}
        for(i=n;i<=1e6+6;i++)
            if(isprime[i]){r1=i;break;}
        if(n-l1<=r1-n)
             cout<" "<else cout<" "<

你可能感兴趣的:(数学(无算法))