问题:打印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;
}