一般写法
int main()
{
int i = 0;
int j = 0;
for (i=101; i<=200; i++)
{
for (j=2; j<i; j++)
{
if (0 == i%j)
{
break;
}
}
if (i == j)
printf("%d ", i);
}
system("pause");
return 0;
}
缺点一:偶数一定不是素数 优化后如下
int i = 0;
int j = 0;
for (i = 101; i <= 200; i+=2)
{
for (j = 2; j<i; j++)
{
if (0 == i%j)
{
break;
}
}
if (i == j)
printf("%d ", i);
}
缺点二: 判断有无因数时重复判断
- 只用除到sqrt(i) ,比如 16 ,只用除到4
- 16的因数 以4(即sqrt(16))为对称轴排列,4(即sqrt(16))以前有 1,2 ,4(即sqrt(16))以后有8,16
- 16/2或16/8 对判断一个数是不是素数,效果其实一样
- 舍弃4(即sqrt(16))后面的因数,只看4(即sqrt(16))前面
优化后如下:
int i = 0;
int j = 0;
for (i = 101; i <= 200; i+=2)
{
for (j = 2; j<=sqrt(i); j++)
{
if (0 == i%j)
{
break;
}
}
if (j > sqrt(i))
printf("%d ", i);
}