c语言求出超级素数

请大家看看有什么问题,最后输出的是1000到9999的所有数#include"stdio.h"#include<math.h>intpanduansushu(intx){... 请大家看看有什么问题,最后输出的是1000到9999的所有数
#include "stdio.h"
#include<math.h>
int panduansushu(int x)
{
int i,j;
j=(int)sqrt(x);
for(i=2;i<j;i++)
{
if(x%i==0)
{
return 0;
}
else return 1;
}
}
void main()
{
int x=1000,a,y;
for(x=1000;x<=9999;x++)
{
y=x;
while(y>0)
{
if(panduansushu(x)==1) y=y/10;
else break;
}
if(y==0) printf("%d\n",x);

}
}
展开
 我来答
panweikan
推荐于2018-04-21 · 超过19用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:47万
展开全部
在这个程序中你到底想干什么?编程序时要想想你到底要干什么,是怎么处理数据的。
第一个是判断素数函数错啦,应为:
int panduansushu(int x)
{
int i,j;
j=(int)sqrt(x);
for(i=2;i<=j;i++)
{
if(x%i==0)
{
return 0;
}
}
return 1;
}

自己理解下,是除以所有小与等于它开更的数都除不尽才是素数。
主函数不用你那么复杂,并且还是错的。
void main()
{
int x=1000,a,y;
for(x=1000;x<=9999;x++)
{
if(panduansushu(x)==1) printf("%d\n",x);
}
}
这样就可以输出1000到9999的素数啦
犇犇yU
2011-04-13
知道答主
回答量:37
采纳率:0%
帮助的人:15万
展开全部
if(x%i==0)
{
return 0;
}
else return 1;
假如x%i!=0;就会执行return 1;
而你的本意是,所有的i都满足x%i!=0 后,执行return 1;
子函数的功能是:(1)X若能被i整除,(一旦找到)就返回 0; (2)当所有的 i都不能整除X 时,说明是 素数。 这两部分 不是if 和 else的关系。应该是 程序 执行的先后 过程。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zero_fn
2011-04-13 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:447万
展开全部
子函数最后一行的else 去掉
追问
为什么
追答
不去掉的话,取余数比较只会进行一次,你的目的是要保证从2开始到sqrt(x)之间全部比较完才能确定中间没有可以整除的数,另外我刚才没注意,要把最后返回放在for循环外面
这样:
int panduansushu(int x)
{
int i,j;
j = (int)sqrt(x);
for(i = 2; i < j ; i++)
{
if(x%i==0)
{
return 0;
}
}
return 1;
}

至于你主函数我没动,你好像要做进一步的判断,不过好像没什么意义 ^-^
关键部分是素数的判断。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式