初学C 自己写的一个求质数程序【我知道这个算法有点烂】 不过还是请高手帮我看看 编译后只能打印61以内的

#include<stdio.h>voidzhishu(inta){inti,j,k,s,num[10000],b[10000];for(i=2;i<a;i++)num[... #include <stdio.h>
void zhishu (int a)
{
int i,j,k,s,num[10000],b[10000];
for(i=2;i<a;i++)
num[i]=i;
printf("%d以内的质数为:",a);

for(;a>1;)
{
for(i=2,j=2;i<a;i++,j++)
b[j]=a%num[i];
for(s=1,j=2;j<a;j++)
{
s*=b[j];
}
if(s!=0)
printf("%d ",a);
a--;

}

}

int main()
{
int num;
printf("输入一个正整数:");
scanf("%d",&num);
zhishu(num);
printf("\n");
return 0;
}
展开
 我来答
fzy范忠云
2011-03-07 · TA获得超过459个赞
知道小有建树答主
回答量:117
采纳率:100%
帮助的人:67.8万
展开全部

编译通过,执行结果也没问题,只是这个程序...该怎么说好呢,其它的代码怎么实现不说,单单看这两个数组num[10000],b[10000]....太浪费内存空间了,其实你可以按实际情况,看你需要求多少以内的质数,把数组改小一些为好

百度网友ac86dcb93
2011-03-07 · TA获得超过116个赞
知道答主
回答量:176
采纳率:0%
帮助的人:145万
展开全部
s*=b[j]; 导致s越界,可能等于一个很大的数然后解释成0了,如s等于0x****00000000然后前面的****溢出,结果导致s=0;改成:
#include <stdio.h>
void zhishu (int a)
{
int i,j,k,s,num[10000],b[10000];
for(i=2;i<a;i++)
num[i]=i;
printf("%d以内的质数为:",a);

for(;a>1;)
{
for(i=2,j=2;i<a;i++,j++)
b[j]=a%num[i];
s = 1;
for(j=2;j<a;j++)
{
//s*=b[j];
if(b[j] == 0)
{
s = 0;
break;
}
}
if(s!=0)
printf("%d ",a);
a--;

}

}

int main()
{
int num;
printf("输入一个正整数:");
scanf("%d",&num);
zhishu(num);
printf("\n");
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有钱买不起房子
2011-03-07 · TA获得超过4326个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2084万
展开全部
void zhishu (int a)
{
int i,j,num[10000],b[10000];
double s;//定义成double
for(i=2;i<a;i++)
num[i]=i;
printf("%d以内的质数为:",a);

for(;a>1;)
{

for(i=2,j=2;i<a;i++,j++)
b[j]=a%num[i];
for(s=1,j=2;j<a;j++)
{
s*=b[j];
}
if(s!=0)
printf("%d ",a);
a--;
}
}
只要把s定义成double就行,因为你要考虑b[i]乘积会超过int范围,使用double完全能容纳进去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-07
展开全部
恩~不错
我进来了~
|黑 信| 发现问题已经解决了
|吧 息| 那我还说神马呢
|安 来| 广 如果你愿意采纳我的我很高兴
|全 源| 告 不过我左边讲的都是真的
|网 :| 神马都是浮云~
努力就会有收获////////////////////////
!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shineixueche
2011-03-07
知道答主
回答量:8
采纳率:0%
帮助的人:6.9万
展开全部
s*=b[j];执行次数太多,可能会导致int型的s过大。此外,验证质数,验证到a/2就足够了吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式