【C语言】打印100 ~ 200之间的素数

一、素数是什么?

素数(prime number)又称质数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数

二、解题思路

1. 思路一

首先判断一个数i是否为素数最简单的方法就是将i与2 ~ i - 1范围内的数分别相除来判断是否为素数,如果i不能被范围内的数整除,即为素数。

注意:下面的代码中第二层for循环当n = 99时,再次n++后,不符合要求跳出循环,这个时候i == n进入if语句中打印素数i。

代码如下:

还可以定义一个整型变量m = 1,如果i能被整除,m将被赋值为0,如果不能将进入if(m == 1)语句中被打印出来。

代码如下:

2. 思路二

假设i = 101,当进入第二层for循环时i要和2 ~ i - 1范围内的所有数都相除一次才能得出结果,判断次数太多不够好。

这里要引入一个点:

i = a * b,a和b中一定至少有一个数字是小于等于开平方i的。也就意味着在2 ~ sqrt(i)的范围里 (这里的sqrt()是用来计算i开平方的函数)没有可以把i整除的数时,这时就可以判断i为素数,反之如果有那么i就为合数。

例16 = 2 * 8或16 = 4 * 4,这里将16开平方,发现符合上述论点。这里的2和4一定是小于等于16开平方。在2 ~ 4这个范围里有可以将16整除的数,所以16为合数。

按照这个思路只需要用2 ~ sqrt(i)这个范围里的数来与i分别相除,来判断i是否可以被整除,这样范围会大幅减小。

注意:

这里引入的库函数sqrt()需要先一开始导入头文件#include <math.h>。

代码里的i为整型sqrt(i)要向下取整。

 代码如下:

3.优化

上面的程序将100 ~ 200范围内的数都判断了一遍,但是偶数都可以被2整除,所以这里可以将所有的偶数都跳过,这样效率将会成倍增长。

代码如下:


总结

以上是我对这道题的解题思路,小白一枚,如有错误欢迎大家提出,感谢!!!

猜你喜欢

转载自blog.csdn.net/LM0624/article/details/125585834