首页 > 代码库 > 素数距离问题

素数距离问题

/*描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。如果输入的整数本身就是素数,则输出该素数本身,距离输出0输入第一行给出测试数据组数N(0<N<=10000)接下来的N行每行有一个整数M(0<M<1000000),输出每行输出两个整数 A B.其中A表示离相应测试数据最近的素数,B表示其间的距离。样例输入36810样例输出5 17 111 100*00*//*365 187 11011 1*/#include <stdio.h>#include "stdlib.h"//判断是否为素数int isPrime(int num){    if (num==1) {        return 0;    }    for (int i=2; i*i<=num; i++) {        if (num%i==0) {            return 0;        }    }    return 1;}int main(int argc, const char * argv[]) {    // insert code here...    int n,num,numUp,numDown,deltUp,deltDown;    scanf("%d",&n);    while (n--) {        scanf("%d",&num);        if (isPrime(num)) {            printf("%d 0\n",num);        }else{            numUp=numDown=num;            while (!isPrime(numUp)) {                numUp+=1;            }            while (!isPrime(numDown)&&numDown>0) {                numDown-=1;            }            deltUp=numUp-num;            deltDown=num-numDown;                        if (numDown==0) {                printf("%d %d\n",numUp,deltUp);            }else if (deltUp>=deltDown){                printf("%d %d\n",numDown,deltDown);            }else{                printf("%d %d\n",numUp,deltUp);            }        }    }    return 0;}

 

素数距离问题