1. 素数计算的基础认知
素数这个数学概念在编程初学者的算法练习中占据着特殊地位。所谓素数,指的是在大于1的自然数中,除了1和它本身外不再有其他因数的数。比如2、3、5、7这些耳熟能详的数字都是典型的素数代表。
判断素数的核心在于理解其数学定义——我们需要确认这个数是否能被2到它平方根之间的任何整数整除。这个认知直接决定了后续算法设计的效率边界。在实际编程中,我们通常会采用试除法(Trial Division)作为基础实现方案,这也是最直观的素数判定方法。
需要模型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;
}
2.2 优化方案一:缩小检测范围
数学知识告诉我们,如果n不是素数,那么它至少有一个因数小于或等于√n。基于这个原理,我们可以将检测范围从2到n-1缩小到2到√n,这样能显著减少循环次数。
c复制int isPrime(int n) {
if (n <= 1) return 0;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return 0;
}
return 1;
}
2.3 优化方案二:排除偶数检测
除了2以外,所有的偶数都不是素数。因此我们可以先排除偶数,然后只检测奇数,这样又能减少一半的检测量。
c复制int isPrime(int n) {
if (n <= 1) return 0;
if (n == 2) return 1;
if (n % 2 == 0) return 0;
for (int i = 3; i * i <= n; i += 2) {
if (n % i ==
