[求助]埃拉托色尼筛网法求质数问题[已解决]
埃拉托色尼筛网法
描述如下:
(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
多了个=号!
for(j=1;i*j<=n;j++)
会运行到i=2,j为5的情况,此时i*j=10,P[10]非法, //把数组P下标的大小设置为比n大1
嗯,我看到了,谢谢,按我写的那个程序,如果求11以内的质数,结果就错了
应该在定义数组P的时候把他的下标设置比n大1(求的n为以内的质数)问题就解决了
----------------解决方案--------------------------------------------------------