当前位置: 代码迷 >> C语言 >> [求助]埃拉托色尼筛网法求质数问题[已解决]
  详细解决方案

[求助]埃拉托色尼筛网法求质数问题[已解决]

热度:396   发布时间:2006-08-11 17:07:54.0
[求助]埃拉托色尼筛网法求质数问题[已解决]

埃拉托色尼筛网法
描述如下:
 (1)定义整数数组P,将所有色数组元素设置为0
 (2)设置变量i=2;
 (3)如果i>n算法结束
 (4)如果P[i]等于0;那么i是一个质数
 (5)对于所有正整数j,如果i*j<=n,将数组元素P[i*j]设置为1
 (6)将i的值增加1,回到(3)
这是我写的用这个算法求10以内的质数,为什么他的输出就只有2?
请大家帮个忙看下
#include<stdio.h>

void main()
{
int i,j,n,P[10];
n=10;
for(i=0;i<n;++i)
P[i]=0;
for(i=2;i<n;++i)
{
if(P[i]==0)
printf("%i ",i);
for(j=1;i*j<=n;j++)
P[i*j]=1;
}
}










[此贴子已经被作者于2006-8-15 1:21:28编辑过]

搜索更多相关的解决方案: 质数  埃拉托色尼  筛网  整数  变量  

----------------解决方案--------------------------------------------------------
for(j=1;i*j<=n;j++)
P[i*j]=1;
错了。
根据题意,是
int t;

....

for(j=1;j<n;j++)
{
t=i*j;
if (t<=n)
p[i*j]=1;
}

似乎是这样,你那几句话我没看明白...
----------------解决方案--------------------------------------------------------
可是我编译运行你的程序可以得到正确的结果,2 3 5 7.
----------------解决方案--------------------------------------------------------
for(i=2;i<n;++i)
{
if(P[i]==0)
printf("%d ",i);
for(j=1;i*j<=n;j++)
P[i*j]=1;
}
----------------解决方案--------------------------------------------------------

不行啊,我用的是vc++6.0.运行的时得到的结果总是只有一个2

只是什么原因啊?


----------------解决方案--------------------------------------------------------
多了个=号!
for(j=1;i*j<=n;j++)
会运行到i=2,j为5的情况,此时i*j=10,P[10]非法,
----------------解决方案--------------------------------------------------------
以下是引用soft_wind在2006-8-11 19:29:04的发言:
多了个=号!
for(j=1;i*j<=n;j++)
会运行到i=2,j为5的情况,此时i*j=10,P[10]非法, //把数组P下标的大小设置为比n大1

嗯,我看到了,谢谢,按我写的那个程序,如果求11以内的质数,结果就错了

应该在定义数组P的时候把他的下标设置比n大1(求的n为以内的质数)问题就解决了


----------------解决方案--------------------------------------------------------
  相关解决方案