二级c考试题库:求出小于或等于lim的所有素数并在a数组里,并返回素数的个数其中一个小问题

2021-02-23 19:08发布

  • #include<stdio.h> #include<conio.h> #include<stdlib.h> void main(){ int limit,i,sum; int a[MAX]; system("CLS"); printf("输入一个整数"); scanf("%d",&limit); sum=fun(limit,a); for(i=0;i<sum;i++){ if(i%10==0&&i!=0) printf("%5d\n",a[i]); //每行输出10个数 } } int fun(int lim,int a[MAX]){ int i,j,k=0; for(i=2;i<=lim;i++){ //求出小于或等于lim的全部素数 for(j=2;j<i;j++){ if(i%j==0)break; if(j>=i)a[k++]=i; //将素数放入数组a中 } } return k; //返回素数的个数 }

为什么最后那边 j会大于等于i,在前面的循环中,j的最大值不是取不到i吗,那怎么可能j会大于i啊啊啊,这一句有大佬能解释一下吗!!!!

1条回答
Remote Sensing_
1楼-- · 2021-02-23 19:58

从2开始到小于自身,用自身对其求余,如果余数为0,则不为素数。

因为每次都会j++,如果自身为素数的话,最后一个j会等于自身。你这个地方>可以当做不存在,没啥用,直接用==判断也行

你后面那个if放到第二个for外面去,你这样是错的