ACM--素数距离问题
Posted byerHu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM--素数距离问题相关的知识,希望对你有一定的参考价值。
题目描述:现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
代码如下:
#include <stdio.h> #include <stdlib.h> #include <math.h> int isPrime(int a){ int i; if(a==1){ return 0; } for(i=2;i<a;i++){ if(a%i==0){ return 0; } } return 1; } int lastPrime(int a){ int i,left,right; if(a==1){ return 2; }else{ // 寻找a左侧的素数保存再变量left中 for(i=a-1;i>=2;i--){ if(isPrime(i)){ left = i; break; } } // 寻找a右侧的素数并保存到变量right中 for(i=a;;i++){ if(isPrime(i)){ right = i; break; } } // 计算哪个值距离更小 if(abs(a-left)<abs(a-right)){ return left; }else if(abs(a-left)>abs(a-right)){ return right; }else{ return left; } } } int main() { // 输入一个测试的整数表示有多少组数 int N,M,lastDigit,distance,flag; scanf("%d",&N); // 循环输入这N个数 while(N>=1){ scanf("%d",&M); // 判断这个数本身是否是一个素数 flag = isPrime(M); if(flag){ printf("%d %d\\n",M,0); }else{ // 输入的数字本身不是素数,则找出距离它最小的素数并返回 lastDigit = lastPrime(M); distance = abs(M-lastDigit); printf("%d %d\\n",lastDigit,distance); } N--; } return 0; }
运行结果如下:
以上是关于ACM--素数距离问题的主要内容,如果未能解决你的问题,请参考以下文章
2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 C: 下一个素数 - 题解