C语言(1)素数距离问题

来源:互联网 发布:只有我知双语未删减版 编辑:程序博客网 时间:2024/05/11 01:45
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
36810
样例输出
5 17 111 1
#include <stdio.h>#include <math.h>/*素数距离问题*//*求是否为素数*/int func(int n){if(n<2){return -1;}int i,j=0;for(i=2; i<=sqrt(n); i++){if(n%i==0){j=1;break;}}if(j == 1){return 1;}else{return 0;}}int main(void){/*n组数据,m数组装数据,lenl向左步数,lenr向右步数*//*yesl向左能否找到素数; rel向左找到的素数,rer*/int m[100000]={0},n,i,j,lenl,lenr,yesl,rel,rer;scanf("%d", &n);for(i=0; i<n; i++){scanf("%d", &m[i]);}for(i=0; i<n; i++){lenl=0;yesl=0;rel=0;/*向左找素数*/for(j=m[i]; j>2; j--){if(0 == func(j)){yesl=1;rel=j;break;}lenl++;}lenr=0;//yesr=0;rer=0;/*向右找素数*/for(j=m[i]; ; j++){if(0 == func(j)){//yesr=1;rer=j;break;}lenr++;}//printf("yesl lenl rel:%d %d %d:  lenr rer: %d %d\n", yesl, lenl, rel , lenr, rer);if(1 == yesl){if(lenl <= lenr){printf("%d %d\n", rel, lenl);}else{printf("%d %d\n", rer, lenr);}}else{printf("%d %d\n", rer, lenr);}}return 0;}