c语言求改错:输入一个整数,输出该范围内最大的素数(质数)。我写出来了,但是运行的不对,请高手更正

#include<stdio.h>voidmain(){inti,j,m,n;scanf("%d",&m);//输入范围i=3,j=2;while(i<=m){while... #include <stdio.h>
void main()
{int i,j,m,n;
scanf("%d",&m); //输入范围
i=3,j=2;
while(i<=m)
{
while(j<i)
{if(i%j==0)break; //一旦发现该数字能被整除就跳出子循环切到下一个数字
j++;
if(j==i)n=i;
}
i++; //下一个需要判断的数字
}
printf("%d",n); //输出范围内最大的素数

}
展开
 我来答
yueshiwu
2012-03-14 · 超过10用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:26万
展开全部
j=2放在第一个while循环里面,第二个while循环外面!!!
否则你的j加上去了而且不会重新设置成2
沧海雄风2009
2012-03-14 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2766万
展开全部
20
19Press any key to continue

#include <stdio.h>
void main()
{
int i,j,m,n;
scanf("%d",&m); //输入范围
i=3,j=2;
while(i<=m)
{
j=2;
while(j<i)
{
if(i%j==0)break; //一旦发现该数字能被整除就跳出子循环切到下一个数字
j++;
if(j==i)
n=i;
}
i++; //下一个需要判断的数字
}
printf("%d",n); //输出范围内最大的素数

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
taeboy
2012-03-14
知道答主
回答量:18
采纳率:0%
帮助的人:16.3万
展开全部
#include <stdio.h>
//用for更清晰点,道理如楼上,每i++,j就要从2开始循环超找,故在第二个循环要初始化j
void main()
{
int i = 0,j = 0,m = 0,n = 0;

scanf("%d",&m);

for(i=3;i<=m;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
break;

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

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
虎秀颖H
2012-03-14
知道答主
回答量:36
采纳率:0%
帮助的人:15.9万
展开全部
这个真的错很多,你可以倒过来判断,判断这个数除以从sqr(i)~2都不能整出,这个数便是所求书,倒过来哦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老冯文库
2012-03-14 · 知道合伙人软件行家
老冯文库
知道合伙人软件行家
采纳数:1139 获赞数:8733

向TA提问 私信TA
展开全部

C程序:

#include <stdio.h>

void main()

{

    int i,j,m,n;

    scanf("%d",&m);

    i=3;

    j=2;

    while(i<=m)

    {

        j=2;        /* 唯一改动处 */

       while(j<i)

       {

            if(i%j==0)

                break;

            j++;

            if(j==i)

                n=i;

         }

         i++;

     }

    printf("%d",n);

说明:按你的程序思路,m是最大数,i是用于从3开始试探,找到最大的素数,j是i的潜在因子,如果j是i的因子,说明i不是素数。由于i会变化,每次测试i是否有因子时,j都应该从2开始重新试探,故需要加上“j=2”这一句。

你的程序还有一个问题:如果输入2,结果不对,因为你的i总是从3开始。

还有一个缺陷:效率不高,求某范围的最大素数,完全可以按m、m-1、m-2 ... 2这样的顺序进行试探,而且可以排除所有偶数。

这是我修改后的程序:

#include <stdio.h>

#include <math.h>

void main()

{

int i,j, k, m;

scanf("%d", &m);

if(m < 2)

return;

else if(m == 2)

{

printf("%d", m);

return;

}

for(i=m; i>=2; i--)

{

k = (int)sqrt(i);

for(j=2; j<=k; j++)

if(i%j == 0)

break;

if(j > k)

break;

}

printf("%d", i);

}

运行测试:

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式