这是一道简单的C语言练习题,要做出这道题首先要知道素数的定义。
素数又称质数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。通俗来讲就是只能被1和它本身整除的数。
代码思路
先定义一个 i 让它从100循环到200,在这个循环中来判断 i 是否为素数。
接着用一个 j 循环从2开始到 i 让 i%j 判断它是否等于0,如果等于0,那么就不是素数,如果遍历完后依旧没有等于0的情况,这个i就是一个素数。
但是这样还没完,我们还需要添加一个flag来判断 if语句 是否判断出i的质数情况,如果flag==0那么i就不是质数,如果flag==1(没有被改变)i就是质数。
初版代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for(i=101;i<=200;i++)
{
int flag = 1;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}
写完代码后,发现还有可以优化的地方,例如:
1.偶数不可能是一个质数,所以 i 的for循环由
for (i = 100; i <= 200; i++)
优化为
for(i = 101; i <= 200; i += 2)
2.通过观察发现 一个数的两个因子其中的一个不会大于根号本身,例如
16=4*4,16=2*8,16=1*16; √16=4,可以看出 4<=4 , 2<=4, 1<=4;
所以我们只需要比较到根号i 就可以判断出i是否为一个质数。
代码由
for (j = 2; j < i; j++)
优化为
for (j = 2; j < sqrt(i); j++)
当然 sqrt()是一个库函数,所以要引一个头文件 #include<math.h>
优化后的全部代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int j = 0;
for(i=101;i<=200;i+=2)
{
int flag = 1;
for (j = 2; j < sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}
调试结果
希望可以帮到你!