问题:
描述
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
-
输入
- 第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出 - 每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入 -
3 6 8 10
样例输出 -
5 1 7 1 11 1
-
个人理解:
-
1:首先需要写一个函数用于判断输入的数是否为素数;
-
2:判断与所输入的数离得最近的素数,可以通过在输入数据的两边累次加一,再将加一后的数字与判断是否为素数,直到遇到素数为止,以此方法得到所求结果;
-
3:判断素谁的函数最好能写在main()函数的上方,防止ACM不让通过。
-
代码:结果 时间 内存 语言 Accepted 204 240 C -
#include <stdio.h> #include <math.h> int x(int m) { int i; if (m==1) return 0; for (i=2;i<=sqrt(m);i++) if (m%i==0) return 0; return 1; } int main() { int n,m,m1,m2,t1,t2,i,j; scanf ("%d",&n); for (j=1;j<=n;j++) { scanf ("%d",&m); if (x(m)) printf("%d0\n",m); else { m1=m2=m; while (!x(m)) { m1+=1; } while (!x(m)&&m2>0) { m2-=1; } t1=m1-m; t2=m-m2; if (m2==0) printf ("%d%d\n",m1,t1); else if (t1>=t2) printf ("%d%d\n",m2,t2); else printf ("%d%d\n",m1,t1); } } return 0; }