首先该程序运行结果正确
#include<stdio.h>
#include<math.h>
int main(){
int i,j,n,a[100];
for (i=0;i<100;i++)a[i]=i+1;
a[0]=0;
for (i=1;i<sqrt(100);i++)
for(j=i+1;j<=100;j++)(问题在这里,数组a[j]为什么可以有a[100],最大不应该是a[99]吗?)
{if (a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;}
printf("\n");
for(i=1,n=0;i<=100;i++)
if(a[i]!=0)printf("%d\t",a[i]);n++;
printf("\n");
return 0;
}
用筛选法求100之内的素数,有一个数组名的问题
答案:3 悬赏:0 手机版
解决时间 2021-03-02 20:08
- 提问者网友:藍了天白赴美
- 2021-03-02 05:52
最佳答案
- 五星知识达人网友:孤独的牧羊人
- 2021-03-02 06:52
不知这个程序清单您是从哪里看来的?
您说的这一个问题,显然是原程序的笔误了。或者原来定义就该定成a[101],或者这里的<=100应该改成<100,否则,数组超界了。
另外,这个程序编的相当糟糕,名为“筛法”,实际上“筛法”的优点全都没有体现。程序结构中大量“多此一举”的操作。
筛法的主要优点是不需要反复顺序一个一个挨着判断,而这里的循环是j++,依然是每次加1,挨着判断;
筛法的另一个优点是不需要做除法,而这里依然是挨着做除法。
本来,求一个数的“倍数”,只需要做乘法,甚至乘法也不必要,依次做加法即可。但这里却将所有的数都挨个用“尝试法”来除一除,看是不是它的倍数,用一句虽然难听但却切中要害的话来评价:“脱裤子放屁多此一举”。
如此,在“筛法”中添加了大量“多此一举”的操作后,其效率丝毫不比最笨的“尝试法”高,还有什么意义呢?
我把这一段程序改一下您看如何:
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,a[101];
for (i=2;i<=100;i++)a[i]=1;
for (i=2;i<sqrt(100);i++)
if(a[i]) for(j=i+i;j<=100;j+=i) a[j]=0;
for(i=2;i<=100;i++)
if(a[i]) printf("%d\t",i);
printf("\n");
return 0;
}
您说的这一个问题,显然是原程序的笔误了。或者原来定义就该定成a[101],或者这里的<=100应该改成<100,否则,数组超界了。
另外,这个程序编的相当糟糕,名为“筛法”,实际上“筛法”的优点全都没有体现。程序结构中大量“多此一举”的操作。
筛法的主要优点是不需要反复顺序一个一个挨着判断,而这里的循环是j++,依然是每次加1,挨着判断;
筛法的另一个优点是不需要做除法,而这里依然是挨着做除法。
本来,求一个数的“倍数”,只需要做乘法,甚至乘法也不必要,依次做加法即可。但这里却将所有的数都挨个用“尝试法”来除一除,看是不是它的倍数,用一句虽然难听但却切中要害的话来评价:“脱裤子放屁多此一举”。
如此,在“筛法”中添加了大量“多此一举”的操作后,其效率丝毫不比最笨的“尝试法”高,还有什么意义呢?
我把这一段程序改一下您看如何:
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,a[101];
for (i=2;i<=100;i++)a[i]=1;
for (i=2;i<sqrt(100);i++)
if(a[i]) for(j=i+i;j<=100;j+=i) a[j]=0;
for(i=2;i<=100;i++)
if(a[i]) printf("%d\t",i);
printf("\n");
return 0;
}
全部回答
- 1楼网友:琴狂剑也妄
- 2021-03-02 07:58
a[100]里面有101个数 a[0]~a[100]
而不是100个数
- 2楼网友:妄饮晩冬酒
- 2021-03-02 07:00
不知这个程序清单您是从哪里看来的? 您说的这一个问题,显然是原程序的笔误了。或者原来定义就该定成a[101],或者这里的<=100应该改成<100,否则,数组超界了。 另外,这个程序编的相当糟糕,名为“筛法”,实际上“筛法”的优点全都没有体现。程序结构中大量“多此一举”的操作。 筛法的主要优点是不需要反复顺序一个一个挨着判断,而这里的循环是j++,依然是每次加1,挨着判断; 筛法的另一个优点是不需要做除法,而这里依然是挨着做除法。 本来,求一个数的“倍数”,只需要做乘法,甚至乘法也不必要,依次做加法即可。但这里却将所有的数都挨个用“尝试法”来除一除,看是不是它的倍数,用一句虽然难听但却切中要害的话来评价:“脱裤子放屁多此一举”。 如此,在“筛法”中添加了大量“多此一举”的操作后,其效率丝毫不比最笨的“尝试法”高,还有什么意义呢? 我把这一段程序改一下您看如何: #include<stdio.h> #include<math.h> int main() { int i,j,a[101]; for (i=2;i<=100;i++)a[i]=1; for (i=2;i<sqrt(100);i++) if(a[i]) for(j=i+i;j<=100;j+=i) a[j]=0; for(i=2;i<=100;i++) if(a[i]) printf("%d\t",i); printf("\n"); return 0; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯