问题:求100到199内所有的素数
这个问题的限定条件:100~199,所有素数。
可以用以下代码完成:
#include<stdio.h>
int main()
{
int i, j;
for (i = 100; i <= 200; i++)
{
int flag = 1;
for (j = 2; j < i; j++)
{
if (i % j == 0)
//这个数不是素数,停止循环,找下一个数
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d是素数\n", i);
}
return 0;
}
那么如何简化这个循环呢?
首先,我们知道偶数是不可以是素数的,同样,偶数也是不可以作为因数的。所以i的取值我们可以设置为奇数,j的取值我们也可以设置为奇数。当然,素数我们只需要比较他的开方数内有没有因数。如果开方数内没有因数,则它的其余位置没有因数(反正大致这个意思,你们好好思索下,eg:100^(-2) =10)
#include<stdio.h>
#include<math.h>
int main()
{
int i, j;
for (i = 101; i <200; i+=2)
{
int flag = 1;
for (j = 3; j < sqrt(i); j+=2)
{
if (i % j == 0)
//这个数不是素数,停止循环,找下一个数
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d是素数\n", i);
}
return 0;
}
这样,就大大降低了循环的执行次数,加快了程序的运行速度。
这两个代码的执行结果: