X 我知道了TIPS:左右滑动导航栏可以查看更多栏目
小弟 刚开始学习c语言,有些问题,请高手指点迷津。
question: 使用筛选法(Eratosthenes法),求1–1000之间的素数。
>> 本文固定链接: http://www.vcgood.com/archives/2070
>> 转载请注明: alex1010 2008年01月05日 于 C语言帝国 发表
我试着编写了一个程序,如下:
//=================================
# include<stdio.h># include<math.h># define N 1000//xxxxxxxxxxxxxxxxxx//fuction protype
//xxxxxxxxxxxxxxxxxxx//global varible
//long int total=0L;//xxxxxxxxxxxxxxxxxxx
void main(){int a[N]={0};int i;int j;int line;int col;int temp;for(i=0;i<N;i++) a[i]=i+1;//xxxxxxxxxxxxxxxxxxxxx line=0;col=0;for(i=0;i<N;i++){ printf(“%5d “,a[i]); col++; if(col>=10){ col=0; printf(“\n”); line++; if(line>=11){ line=0; getch(); } } }//xxxxxxxxxxxxxxxxxxxxxxxxxxxx a[0]=0;temp=sqrt(N);for(i=1;i<temp;i++){ if(a[i]){ for(j=i+1;j<=N;j++){ if(a[j]&&(a[j]%a[i]==0)) a[j]=0; } }
} //xxxxxxxxxxxxxxxxxxxxxxxxxxxx line=0;col=0;printf(“\n the primes are:\n”);for(i=0;i<N;i++){ if(a[i]){ printf(“%5d “,a[i]); col++; if(col>=10){ col=0; printf(“\n”); line++; if(line>=11){ line=0; getch(); } } }} getch();}
程序运行,正确
如下图
晕 ,怎么上传不了图片啊,
然后,我很高兴,于是,我把 N 的值改成 10000,求 1–10000之间的素数,
也出来结果了。我很高兴,呵呵。。。。
但是,无意中,我看到了 输出结果中 有 999 这个数字。我晕了
因为 999=9×111=3x3x111 不是素数啊
I am so confused.
求素数的算法用文字描述一下!
这段有问题!//xxxxxxxxxxxxxxxxxxxxxxxxxxxx a[0]=0;temp=sqrt(N);for(i=1;i<temp;i++){ if(a[i]){ for(j=i+1;j<=N;j++){ if(a[j]&&(a[j]%a[i]==0)) a[j]=0; } }
}
多谢了, 我看了一下,是变量越界了,可是,如果不使用temp变量,程序依然成立,a[0]=0;for(i=1;i<sqrt(N);i++){ if(a[i]){ for(j=i+1;j<=N;j++){ if(a[j]&&(a[j]%a[i]==0)) a[j]=0; } }
请问:问题出在哪儿???
你必须先 登录才能发表评论。
我试着编写了一个程序,如下:
//=================================
# include<stdio.h>
# include<math.h>
# define N 1000
//xxxxxxxxxxxxxxxxxx
//fuction protype
//xxxxxxxxxxxxxxxxxxx
//global varible
//long int total=0L;
//xxxxxxxxxxxxxxxxxxx
void main()
{
int a[N]={0};
int i;
int j;
int line;
int col;
int temp;
for(i=0;i<N;i++)
a[i]=i+1;
//xxxxxxxxxxxxxxxxxxxxx
line=0;
col=0;
for(i=0;i<N;i++){
printf(“%5d “,a[i]);
col++;
if(col>=10){
col=0;
printf(“\n”);
line++;
if(line>=11){
line=0;
getch();
}
}
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxx
a[0]=0;
temp=sqrt(N);
for(i=1;i<temp;i++){
if(a[i]){
for(j=i+1;j<=N;j++){
if(a[j]&&(a[j]%a[i]==0))
a[j]=0;
}
}
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxx
line=0;
col=0;
printf(“\n the primes are:\n”);
for(i=0;i<N;i++){
if(a[i]){
printf(“%5d “,a[i]);
col++;
if(col>=10){
col=0;
printf(“\n”);
line++;
if(line>=11){
line=0;
getch();
}
}
}
}
getch();
}
程序运行,正确
如下图
晕 ,怎么上传不了图片啊,
然后,我很高兴,于是,我把 N 的值改成 10000,求 1–10000之间的素数,
也出来结果了。我很高兴,呵呵。。。。
但是,无意中,我看到了 输出结果中 有 999 这个数字。我晕了
因为 999=9×111=3x3x111 不是素数啊
I am so confused.
求素数的算法用文字描述一下!
这段有问题!
//xxxxxxxxxxxxxxxxxxxxxxxxxxxx
a[0]=0;
temp=sqrt(N);
for(i=1;i<temp;i++){
if(a[i]){
for(j=i+1;j<=N;j++){
if(a[j]&&(a[j]%a[i]==0))
a[j]=0;
}
}
}
多谢了,
我看了一下,是变量越界了,可是,如果不使用temp变量,程序依然成立,
a[0]=0;
for(i=1;i<sqrt(N);i++){
if(a[i]){
for(j=i+1;j<=N;j++){
if(a[j]&&(a[j]%a[i]==0))
a[j]=0;
}
}
}
请问:问题出在哪儿???