首页 > 编程笔记 > C语言笔记

C语言求100到200之间的素数(附带源码和解析)

在探讨如何用C语言求解 100 到 200 之间的素数之前,我们需要先理解什么是素数。素数,也称为质数,是一个大于 1 的自然数,除了 1 和它本身外,不能被其他自然数整除。换句话说,素数只有两个因子:1 和它本身。例如,2、3、5、7、11 都是素数,而 4、6、8、9、10 不是素数。


判断一个数是否为素数的原理相对简单,我们只需要检查这个数是否能被比它小的数(除了 1)整除,如果找到了一个这样的数,那么它就不是素数。但是,我们不需要检查所有比它小的数,只需要检查到它的平方根就足够了。这是因为如果一个数 n 不是素数,它一定有一个小于或等于它平方根的因子。
 

现在,让我们用C语言来实现一个程序,找出 100 到 200 之间的所有素数。我们将创建一个函数来判断一个数是否为素数,然后使用这个函数来检查 100 到 200 之间的每个数。

#include <stdio.h>
#include <stdbool.h>
#include <math.h>

bool isPrime(int num) {
    if (num <= 1) return false;
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) return false;
    }
    return true;
}

int main() {
    printf("100到200之间的素数有:\n");
    for (int i = 100; i <= 200; i++) {
        if (isPrime(i)) {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

让我们详细解释一下这段代码:
 

我们首先包含了必要的头文件。<stdio.h> 用于输入输出,<stdbool.h> 引入了 bool 类型,<math.h> 则用于 sqrt() 函数。
 

isPrime() 函数用来判断一个数是否为素数。它首先检查传入的数是否小于或等于 1,如果是,直接返回 false,因为素数必须大于 1。然后,它从 2 开始循环到传入数的平方根,检查是否有能整除该数的因子。如果找到了这样的因子,就返回 false。如果循环结束都没有找到因子,则返回 true,表示这个数是素数。


在 main() 函数中,我们使用一个 for 循环遍历 100 到 200 之间的所有数。对于每个数,我们调用 isPrime() 函数来判断它是否为素数。如果是素数,我们就打印出这个数。


运行这个程序,我们将得到以下输出:

100到200之间的素数有:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 

这个程序有效地找出了 100 到 200 之间的所有素数。它利用了素数的数学特性,只检查到平方根,大大减少了计算量。对于更大范围的素数查找,我们可能需要考虑使用更高效的算法,如埃拉托斯特尼筛法(Sieve of Eratosthenes)。但对于这个范围来说,我们的算法已经足够高效了。
 

通过这个例子,我们不仅学习了如何在C语言中实现素数判断,还复习了函数定义、循环结构、条件判断等基本编程概念。这种将数学概念转化为代码的过程是编程中常见的任务,它能够锻炼我们的逻辑思维和问题解决能力。

相关文章