C语言求素数

#include "stdio.h"
void main()
{
int i,k=0,a[10],b,j;
for(i=2;i<100;i++)
{
for(j=2;j<b;j++)
{if(i%j==0){break;}
else
{a[k]=i;
k++;}}
}
for(i=0;i<k;i++)
printf("%d ",a[i]);
}
执行了黑框框里一个书也没,请大家帮我看看这个函数那些地方不对啊?
刚少个b=i/2;

第1个回答  2011-09-19
你的想法是有一定正确性的,怀疑精神值得赞赏。
但你不能立即判断出哪个是素数,要试过所有的情况,而该程序中为什么要加flag,主要是为了初学者易懂。初学者应该开始写代码的时候尽量追求代码的清晰易懂,而不是为了代码的精简。如果直接来可能容易犯错误。代码精简可以以后熟悉了慢慢就会。

去掉flag的正确代码如下,不知道你是不是。另外如果你怀疑的话,可以通过实验和标准代码比较,看看自己的想法是不是正确,这样对你的学习是很有帮助的:
main()
{
int i,m;
for(i=2;i<=1000;i++)
{
for(m=2;m<i;m++)
{
if(i%m==0){
break;
}
}
if(m==i)
printf("%d ",i);
}
}
第2个回答  2011-09-18
我把你的程序改动了一下:
#include "stdio.h"

void main()
{
int i,j,k=0,a[100],b;
b=i/2;
for(i=2;i<100;i++)
{
for(j=2;j<b;j++)
{
if(i%j==0)
break;
}
if(i==j)
{
a[k]=i;
k++;
}
}
for(i=0;i<k;i++)
printf("%d ",a[i]);
getch();
}
1.a数组申请的空间不够,会造成数组访问越界,保守一些,申请100个空间;
2.计算素数的算法不对,应该是对于一个i,如果去2到i-1之间的所有数,都有i%j不为零,则该数为素数;
3.不知道你的问题是不是说黑屏一闪而过,如果是的话,则需要根据具体的编译器设置。我用的是win-tc,所以加了一句getch();
不知是不是你想要的答案?
第3个回答  2011-09-18
首先b没初始化也没赋值就使用了。
{if(i%j==0){break;}
else
{a[k]=i;
k++;}}
这个逻辑有问题,怎么每循环一次只要i不是j的倍数就存起来呢?a[10]会不够的,存的数也没意义
第4个回答  2011-09-18
#include<stdio.h>
#include<math.h>
#define n 2 //求n到m之间的素数
#define m 100
void main(){
int i,j,k;
for(i=n;i<=m;i++)
{
k=sqrt(i+1);
for(j=2;j<=k;j++)
{
if(i%j==0)
break;
if(j>=k)
{
printf("%d",i);
printf("\n");
}
}
}
}本回答被提问者和网友采纳
第5个回答  2011-09-18
我还是对c语言中求素数的问题不太理解,就是我用的两个for循环,然后用if你的想法是有一定正确性的,怀疑精神值得赞赏。但你不能立即判断出哪个是