第一题算法思路:1.a小于2,输出最近素数为2.下面讨论a>=2的情况。
2.a本身是素数,输出a(距离为0)
3.a不是素数,下面分奇偶讨论
4.a为奇数:判断a+2n和a-2n是否为素数
5.a为偶数: 判断a+(2n+1)和a-(2n+1)是否为素数
建议将判断素数这一步骤封装成函数。
代码如下:(可能不够简洁,水平有限,用notepad++写的时候对齐的挺好,贴过来变这样头疼)
#include<stdio.h>
#include<math.h>
int pri_num(int x);
int main()
{
int a;
printf("请输入一个整数:");
scanf("%d",&a);
if(a<2)printf("距离此数最近的素数是2");//a为负整数
else//a为正整数
{
if(pri_num(a)) printf("距离此数最近的素数是%d",a);//a本身是素数
else//a不是素数
{
int n=0,b,c=0;
if(a%2==0)//a是偶数
{
while(1)//寻找距离此数最近的素数
{
b=2*n+1;
if(pri_num(a+b))//a+b为素数
{
c=1;
if(pri_num(a-b))printf("距离此数最近的素数有两个:%d %d\n",a+b,a-b);
else printf("距离此数最近的素数是%d\n",a+b);
}
else if (pri_num(a-b))//a-b为素数
{
c=1;
printf("距离此数最近的素数是%d\n",a-b);
}
if(c==1)break;
n++;
}
}
else //a是奇数
{
while(1)
{
b=2*n;
if(pri_num(a+b))//a+b为素数
{
c=1;
if(pri_num(a-b))printf("距离此数最近的素数有两个:%d %d\n",a+b,a-b);
else printf("距离此数最近的素数是%d\n",a+b);
}
else if (pri_num(a-b))//a-b为素数
{
c=1;
printf("距离此数最近的素数是%d\n",a-b);
}
if(c==1)break;
n++;
}
}
}
}
return 0;
}
int pri_num (int x)//素数判断函数,是返回1;不是返回0
{
int i;
for(i=2;i<=(int)sqrt(x);i++)
{
if(x%i==0)break;//不是素数立即跳出循环
}
if(i>(int)sqrt(x))return 1;//是素数返回1
return 0;
//不是返回0
}
[此贴子已经被作者于2016-11-6 16:50编辑过]