在C语言的学习过程中,会有一个又一个的经典案例,就比如今天讲的这个——素数的输出,也算C语言学习中的一个经典历程。
一、什么是素数
- 素数又称质数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
- 例如:5这个数的因数只有1和5,再也找不出其他的因数了,这样的数就叫做素数。
- 下图为0~500之间的素数表:
- 了解了什么是素数后,下面我将用3种不同的方案来实现“输出100到200之间的素数”。
二、输出100到200之间的素数 方案一
- 是用100~200之间的每一个数字,除以2到其本身,如果此过程中出现了整除,则该数不是素数,如果未出现整除,则该数是素数,将此数进行输出。
代码如下:
#include方案二int main() { int i = 0, j = 0, number = 0; for (i = 100; i <= 200; i++) { for (j = 2; j <= i; j++) { if (i % j == 0) { break; } } if (i == j) { number++; printf("%d.t", number); printf("%dn", i); } } return 0; }
- 这里使用了 sqrt() 函数,sqrt() 函数是平方根函数,功能是计算一个非负实数的平方根,调用时程序要包含(math.h)头文件。
- 非素数可以写成除了1和它本身相乘的 a * b 方式,而 a、b 之间必有一个小于等于 a b 之积的开平方根。如果这个非素数能够被 a 整除,则相应的肯定可以被 b 整除。
- 这种方法用100~200之间的数字除以2到它的开平方根(如果该数的平方根是整数则可以除到),在此之间如果出现了整除,则该数不是素数。如果未出现整除,则该数是素数,将此数进行输出。方案二要比方案一更加简便,运行的次数减少。
代码如下:
#include方案三#include int main() { int i = 0, j = 0, number = 0; for (i = 100; i <= 200; i++) { for (j = 2; j <= sqrt(i); j++) { if (i % j == 0) { break; } } if (j > sqrt(i)) { number++; printf("%d.t", number); printf("%dn", i); } } return 0; }
- 是对方案二的优化处理。
- 在100~200之间的所有偶数都不是素数,所以可以去除,直接对奇数进行判断,对于方案二来说可以让程序的运行时间减少一半。
代码如下:
#include#include int main() { int i = 0, j = 0, number = 0; for (i = 101; i <= 200; i += 2) { for (j = 2; j <= sqrt(i); j++) { if (i % j == 0) { break; } } if (j > sqrt(i)) { number++; printf("%d.t", number); printf("%dn", i); } } return 0; }
总结
以上就是我用C语言输出”100~200之间的素数“的见解与代码的编写,如果您有更好的方案,欢迎留言评论。



