问题:
求解100-200之间所有的素数:
思想:
排除偶数,只遍历奇数
判断n是不是素数,只需要确定2到n-1之间没有能整除n的数
进一步简化第2步,只需要确定2到根号n之间没有能整除n的数
![](https://i-blog.csdnimg.cn/blog_migrate/d31abde6fc13b8c61746d60424c67fb7.png)
如图所示:除了x=y=根号n的这种情况外,其他情况下,x和y必定有一个小于根号n。而我们遍历素数,也只需要遍历这一部分。
代码实现:
#include <stdio.h>
#include <math.h>
//求解100到200之间的所有素数
int main()
{
//遍历100到200之间所有的奇数
for (int i = 101; i <= 200; i += 2)
{
int flag = 1;
//遍历2到根号n之间的数
for (int j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
//标记为非素数
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}