题目:打印100~200之间的素数
方法一、试除法
#include <stdio.h>
int main()
{
int i=0;
int count=0;
//用for循环取100到200的数字,因为100肯定不是素数所以从101开始取
for(i=101;i<=200)
{
int j=0;
for(j=2;j<i;j++)
{
if(i%j==0)
{
break;
}
}
if(j==i)//如果j=i说明在2到i之间的数没有任何一个书可以整除i;
{
count++;
printf("%d ",i);
}
}
printf("\ncount=%d\n",count);
return 0;
}
此方法的缺陷是:超过i一半的数肯定不是i的倍数,只需要用2到i/2之间的数来试除即可。
方法二、试除法改进
#include <stdio.h>
#include <math.h>
int main()
{
int i=0;
int count=0;
for(i=101;i<=200)
{
int j=0;
for(j=2;j<sqrt(i);j++)
{
if(i%j==0)
{
break;
}
}
//if(j>i/2)//如果j>i/2说明在2到i之间的数没有任何一个书可以整除i;
if(j>sqrt(i))//继续优化法线除数在2到根号i之间即可
{
count++;
printf("%d ",i);
}
}
printf("\ncount=%d\n",count);
return 0;
}
方法三、最终优化版
int main()
{
int i = 0;
int count = 0;
//因为偶数不可能是素数,所以在最初将偶数筛除
for(i=101; i<=200; i+=2)
{
int j = 0;
for(j=2; j<=sqrt(i); j++)
{
if(i%j == 0)
{
break;
}
}
if(j>sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}