···输出100以内素数的关键是明白素数的概念:只能被自身或1整除的数叫素数。0和1都不是素数。
···应该想到用for循环,既然0,1不是素数,那循环就应从2开始,到100。
···要判断能不能整除其他数,就应该想到用循环嵌套,在一层for循环的基 础上去对比它小的数取余(注意应从2开始)。
···其次,考虑用什么方法记录素数。因为只有素数和非素数,于是用1和0来标记素数和非素数。
···最后,在一层循环内输出标记为1的所有数。
···如果j的for用j<=i/2,注意一定是<=,下面的if条件也要改为(j>i)。(i如果不是素数,就一定能写成a*b的形式,a、b中一定有一个数是小于i/2的)
#include<stdio.h>
int main(void){
int i;
for(i=2;i<=100;i++){
int isPrime = 1;
int j;
for(j=2;j<i;j++){ //(j)
if(i%j==0){
isPrime = 0;
break;
}
}
/*(另外一种判断方法)break跳到这里,j++到头也来到这里,但只有j++到头得到的才是素数,所以要进行判断:
if(j==i){
printf("%d ",i);
}
*/
if(isPrime==1){
printf("%d ",i);
}
}
return 0;
}
当然代码可以优化,使得效率更高。
#include<stdio.h>
#include<math.h> //数学库函数
int main(void)
{
int i = 0;
for(i=3; i<=100; i+=2){ //只判断奇数
int j = 0;
for(j=2; j<sqrt(i); j++){ //小于根号下i
if(i%j==0)
break;
}
if(j>sqrt(i))
printf("%d ",i);
}
return 0;
}