1. 素数计算的基础概念
素数(质数)这个数学概念在计算机科学中有着广泛的应用场景。简单来说,素数就是大于1的自然数,除了1和它本身外,不能被其他自然数整除。比如2、3、5、7等都是典型的素数,而4、6、8、9则不是。
在密码学、哈希算法、随机数生成等领域,素数都扮演着重要角色。以RSA加密算法为例,其安全性正是基于大素数分解的困难性。因此,掌握素数的计算方法对程序员来说是一项基础但重要的技能。
计算100以内的素数看似简单,但其中蕴含着几个关键算法思想。最直观的方法是暴力枚举法,即对每个数n,检查2到n-1的所有整数是否能整除n。这种方法虽然简单直接,但效率低下,特别是当数字范围增大时。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 算法设计与优化思路
2.1 基础暴力算法实现
最基础的素数判断算法可以这样描述:对于一个待判断的数n,从2开始到n-1,依次检查是否能整除n。如果都不能整除,则n是素数。
c复制int isPrime(int n) {
if (n <= 1) return 0;
for (int i = 2; i < n; i++) {
if (n % i == 0) return 0;
}
return 1;
}
这个算法虽然正确,但存在明显的效率问题。对于每个数n,都需要进行n-2次除法运算。计算100以内的素数总共需要进行大约5000次除法运算。
2.2 优化思路一:缩小检查范围
观察数学性质可以发现,如果n不是素数,那么它至少有一个因数小于等于√n。因此,我们只需要检查2到√n的范围即可。
c复制int isPrimeOptimized(int n) {
if (n <= 1) return 0;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return 0;
}
return 1;
}
这个优化将时间复杂度从O(n)降低到了O(√n),对于100以内的数,最多只需要检查到10即可,大大减少了计算量。
2.3 优化思路二:排除偶数
除了2以外,所有的偶数都不是素数。因此,我们可以先排除所有大于2的偶数,只检查奇数。
c复制int isPr
