【c语言】程序功能:从键盘输入一个大于2的正整数n,求解并输出大小最接近n的素数(不包括n)

程序功能:从键盘输入一个大于2的正整数n,求解并输出大小最接近n的素数(不包括n)。例如:如输入:17输则出:19如输入:45则输出:4347... 程序功能:从键盘输入一个大于2的正整数n,求解并输出大小最接近n的素数(不包括n)。例如:
如输入:17
输则出:19
如输入:45
则输出:43 47
展开
 我来答
KlarkKenter
2021-05-07 · TA获得超过1681个赞
知道小有建树答主
回答量:1540
采纳率:0%
帮助的人:362万
展开全部

两个for循环分别向下和向上查找得到最近的素数n0和n1,判断其与n是否最近,如果距离相同则同时输出。

#include "stdafx.h"

#include <iostream>

using namespace std;

bool isp(int x)

{

for (int i = 2; i <= sqrt(x); i++)

{

if (x%i == 0)

return false;

}

return true;

}

int main()

{

int n,n1,n0;

cin >> n;

for (int i = n + 1; ; i++)

if (isp(i))

{

n1 = i;

break;

}

for (int i = n - 1;; i--)

if (isp(i))

{

n0 = i;

break;

}

if ((n1 - n) < (n - n0))

cout << n1<<endl;

else if((n1 - n) > (n - n0))

cout << n0<<endl;

else

cout << n0 << " " << n1 << endl;

system("pause");

    return 0;

}

mgeer
2013-05-14
知道答主
回答量:6
采纳率:0%
帮助的人:9026
展开全部
1.获取输入的数,2.分别递增递减遍历,3.判断当前数是否是质数。 判断数m是否是质数的方法:看2到根号m之间是否有数能整除m.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wairww1314
2013-05-14 · 超过36用户采纳过TA的回答
知道答主
回答量:163
采纳率:0%
帮助的人:93.3万
展开全部
//保证a是素数
int sushu(int a)
{
if(a==1)
{
return 0;
}
if(a==2)
{
return 1;
}
if(a==3)
{
return 1;
}
if(a>3)
{
int i;
for(i=2;i<=sqrt(a);i++)
{
if(a%i==0)
{
break;
}
}
if(i>sqrt(a))
{
return 1;
}
else
{
return 0;
}
}
}

//主函数
void main()
{
int i,j,k;
printf("请输入一个大于2的正整数:");
scanf(i);
for(j=i;j>0;j--)
{
if(1==sushu(j))
{
break;
}
}
for(k=i;k<99999;k++)
{
if(1==sushu(k))
{
break;
}
}
if((k-i)<(i-j))
{
printf("%d",k)
}
else if((k-i)>(i-j))
{
printf("%d",j)
}
else if((k-i)=(i-j))
{
printf("%d,%d",j,k)
}
}
因电脑没有环境,未经测试
如有问题,请追问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
龍__鳳
推荐于2018-02-28 · TA获得超过2346个赞
知道小有建树答主
回答量:948
采纳率:0%
帮助的人:1407万
展开全部

#include <stdio.h>

#include <math.h>

int fun(int n)

{

for(int i=2;i<n/2;i++)

if(n%i==0)

return 0;

return 1;

}

int main()

{

int num;

scanf("%d",&num);

for(int i=num-1,j=num+1;;i--,j++)

{

if(fun(i)&&fun(j))

{

printf("%d %d\n",i,j);

break;

}

if(fun(i)&&!fun(j))

{

printf("%d\n",i);

break;

}

if(!fun(i)&&fun(j))

{

printf("%d\n",j);

break;

}

}

return 0;

}

更多追问追答
追问
在GUIDE上运行有错误。

--------开始编译--------
4.4.c: In function `fun':
4.4.c:5: error: 'for' loop initial declaration used outside C99 mode
4.4.c: In function `main':
4.4.c:14: error: 'for' loop initial declaration used outside C99 mode
4.4.c:33:2: warning: no newline at end of file
编译结束但存在 2 错误 和 1 警告

不能编译
追答
我用的vc++6.0可以运行呀
你把for循环里的i,j在for外面定义,然后再试试
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
殇雪璃愁
2021-06-11 · TA获得超过293个赞
知道小有建树答主
回答量:697
采纳率:56%
帮助的人:42.7万
展开全部
#include<stdio.h>
int main()
{
int i, j, t, n;
while (scanf("%d", &n) != EOF)
{
t = n - 1;
for (i = 2, j = n + 2; i < t; i++)
if (t % i == 0)
t--;
else if (j % i == 0)
j++;
if (n - t < j - n)
printf("%d\n", t);
else if (n - t > j - n)
printf("%d\n", j);
else
printf("%d %d\n", t, j);
}
return 0;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式