问题:打印100---200之间的素数,并得出个数。

1.首先我们要了解 “ 素数 (质数)”,就是大于1的自然数,除了1和自身之外没有别的因数。

循环解决问题:

试除法

#include<stdio.h>

int  main()

{

int i=0;

int  count=0;

for(i=100;i<=200;i++) //第一个循环

{

int  j=0;//    j的取值范围为 : 2<j<i-1

for(j=2;j<i;j++)  //第二个循环语句

{

if(i%j==0)  //说明在规定的区间范围内有可以被i整除的数

break;  //不满足,所以跳出第二个循环语句

}

if(i==j)  

{

printf("%d\n",j);

count++;

}

}

printf("\ncount=%d\n",count);

return  0;

}

第二种:优化,减少了整除的次数

#include<stdio.h>

#include<math.h>    //这里是sqart的头文件

int  main()

{int i=0;

int  count=0;

for(i=100;i<=200;i++) //第一个循环

{

int  j=0;//    j的取值范围为 : 2<j<i-1

for(j=2;j<sqart(i);j++)  //第二个循环语句

{

if(i%j==0)  //说明在规定的区间范围内有可以被i整除的数

break;  //不满足,所以跳出第二个循环语句

}

if(j>sqart(i))  

{

printf("%d\n", i);

count++;

}

}

}

printf("\ncount=%d\n",count);

  return  0;

}

或者还可以进一步简化,就是在for语句内改为(i=101;i<=200;i+=2)

第三种:函数的运用

#include<stdio.h>

int  is_prime(int n)

{

int  j=0;

for(j=2;j<n;j++)

{

if(i%j==0)

return 0;

}

return  1;

}

int  main()

{

int  i=0;

for(i=100;i<=200;i++)

{

if( is_prime(i)==1)

printf("%d   \n",i);

}

return  0;

}