一、素数的概念
想要解出这道题,首先需要了解什么是素数。以下为素数的概念:
素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
二、解题思路&代码
这道题最简便且效率最高的代码是用试除法,具体代码如下:
#include<stdio.h>
#include <math.h>
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+=2)
//因为偶数必定不是素数,所以在循环的时候不必把偶数考虑在内,这样可以提高编译器的运算效率
{
int flag = 1;//假设i是素数
//判断i是否为素数
//拿2~(i开根号)之间的数字去试除i
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0; //i不是素数
break;
}
}
if (flag == 1) //i是素数
{
printf("%d ", i);
count++; //count用于统计打印了的100~200之间的素数个数,方便后期测试代码正误与否
}
}
printf("\ncount = %d\n", count);
return 0;
}
其中代码中的sqrt(i)表示的是对i开平方的意思,注意需要引头文件<math.h>
关于代码的,已经都在代码段中的注释有所解释。这里着重解释一下为什么在循环中 j 的取值为2~根号i,请C友看我下面的思路图
j 的取值,在2~根号 i 之间就够了,通俗点来说就是:如果 i 不是素数,那么他必定有一个因数小于或等于根号 i
这种写法的编译效率,会比 j 取值2~j-1快得多,不会浪费过多编译器资源,在此推荐给各位C友
本篇博客到此为止,如果有什么问题可以在评论区提出,我会尽力帮助各位。
有如何不足之处也欢迎各位指出,我会虚心向各位学习。
明天就是除夕了,在这里祝各位新的一年技术越来越高超,早日拿到心仪offer!