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

C语言求1到100的质数(有源码有解析)

质数,也称为素数,是一个大于 1 的自然数,除了 1 和它本身外,不能被其他自然数整除。换句话说,质数只有两个因子:1 和它自身。例如,2、3、5、7、11 等都是质数,而 4、6、8、9、10 等则不是质数。


判断一个数是否为质数的基本思路是,检查这个数是否能被比它小的数(除了 1)整除:如果能被整除,那么它就不是质数;如果不能被任何小于它的数整除,那么它就是质数。
 

然而,我们可以对这个过程进行优化,只需要检查到这个数的平方根就足够了。这是因为如果一个数 n 是合数(非质数),它一定可以表示为 a * b 的形式,其中 a 和 b 都小于 n。而 a 和 b 中至少有一个小于或等于 n 的平方根。因此,我们只需要检查到 sqrt(n) 就可以了,这样可以大大减少计算量。
 

了解了这些原理后,让我们来看看如何用C语言实现 1 到 100 的质数求解。以下是一个完整的 C 程序,它会找出并打印 1 到 100 之间的所有质数:

#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("1到100之间的质数有:\n");
    for (int i = 1; i <= 100; i++) {
        if (isPrime(i)) {
            printf("%d ", i);
        }
    }
    printf("\n");
    return 0;
}

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

我们定义了一个名为 isPrime 的函数,它接受一个整数参数 num,并返回一个布尔值,表示这个数是否为质数。
 

在 isPrime 函数中,我们首先检查 num 是否小于或等于 1,因为 1 不是质数。然后,我们使用一个 for 循环,从 2 开始到 num 的平方根,检查 num 是否能被这些数整除。如果能被整除,就立即返回 false,表示不是质数。如果循环结束后还没有返回,说明这个数是质数,我们返回 true。


在 main 函数中,我们使用另一个 for 循环,遍历 1 到 100 的所有整数。对于每个数,我们调用 isPrime 函数进行检查。如果是质数,我们就将它打印出来。
 

这个程序运行后会输出以下结果:

1到100之间的质数有:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

这个程序虽然能够正确找出所有的质数,但在处理更大范围的数时可能会变得较慢。对于更大规模的质数查找,我们可以使用更高效的算法,如埃拉托斯特尼筛法(Sieve of Eratosthenes)。这种方法可以更快地找出一定范围内的所有质数,特别是当我们需要找出一个较大范围内的所有质数时。
 

通过学习和实践这个程序,初学者可以深入理解质数的概念,掌握判断质数的方法,并学会如何在C语言中实现这个算法。

相关文章