素数距离问题

来源:互联网 发布:darma公司 知乎 编辑:程序博客网 时间:2024/06/12 18:46

素数距离问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
36810

样例输出

5 1

7 1

11 1


这个问题实际上就是判断三个数是不是素数,然后根据距离输出~

首先写个函数判断是否是素数;

然后分别写两个函数找输入数左边和右边的素数;

        最后在主函数中根据输入数的不同情况进行输出:

输入1的情况,输出 2  1;

输入素数的情况,输出本身和0;

输入数距左边近,输出左边素数和距离;

输入数距右边近,输出右边素数和距离;

输入数距左右两边素数相等,输出左边素数和距离~~


#include<stdio.h>#include<math.h>int isprime(int n){    int k=(int)sqrt(n);    int i;    for(i=2; i<=k; i++)    {        if(n%i==0)            return 0;    }    return 1;}int da(int f){    int i;    for(i=f+1; i; i++)    {        if(isprime(i))            return i;    }}int xiao(int f){    int i;    for(i=f-1; i>2; i--)        if(isprime(i))            return i;}int main(){    int n;    scanf("%d",&n);    while(n--)    {        long long a;        scanf("%lld",&a);        if(a==1)            printf("2 1\n");        else        {            if(isprime(a))                printf("%d 0\n",a);            else if((da(a)-a)>(a-xiao(a)))                printf("%d %d\n",xiao(a),(a-xiao(a)));            else if((da(a)-a)<(a-xiao(a)))                printf("%d %d\n",da(a),(da(a)-a));            else if((da(a)-a)==(a-xiao(a)))                printf("%d %d\n",xiao(a),(a-xiao(a)));        }    }}


0 0