1. 数论基础概念与应用场景
数论作为数学中最古老的分支之一,研究整数的性质和相互关系。在计算机科学领域,数论算法构成了密码学、数据压缩、随机数生成等技术的数学基础。现代加密系统如RSA、椭圆曲线加密都依赖于大质数的难分解特性。
我最初接触数论是在ACM竞赛训练时,当时被一道看似简单的质数判定题卡了整整两天。这段经历让我深刻认识到,理解数论概念背后的数学原理比单纯记忆算法模板重要得多。下面我将结合代码实例,分享几个最常用的数论工具。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 质数的判定与高效筛法
2.1 质数的基本性质
质数是指大于1的自然数中,除了1和它本身外不再有其他因数的数。判断一个数n是否为质数,最直观的方法是试除法:
python复制def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
这个算法的时间复杂度是O(√n),对于单个数的判定已经足够。但当需要处理大量质数时,我们需要更高效的筛法。
2.2 埃拉托斯特尼筛法
埃氏筛是最经典的质数筛法,其核心思想是:如果一个数是质数,那么它的倍数一定不是质数。以下是实现200000以内质数筛的代码:
python复制def sieve(n):
is_prime = [True] * (n+1)
is_prime[0] = is_prime[1] = False
for i in range(2, int(n**0.5)+1):
if is_prime[i]:
for j in range(i*i, n+1, i):
is_prime[j] = False
return [i for i, val in enumerate(is_prime) if val]
注意:内层循环从i*i开始,因为更小的倍数已经被之前的质数标记过了。这个优化能将时间复杂度降到O(n log log n)。
2.3 线性筛法(欧拉筛)
对
