📜  Sundaram筛可打印所有小于n的素数(1)

📅  最后修改于: 2023-12-03 15:20:23.061000             🧑  作者: Mango

Sundaram筛介绍

Sundaram筛是一个用于查找所有小于给定整数n的素数的算法。该算法是由印度数学家S. P. Sundaram在1934年提出的,因此得名Sundaram筛。

原理

Sundaram筛的原理是利用了素数的性质——一个大于1的自然数n是素数,当且仅当在2~(n-1)之间不存在其它正整数能够整除n。算法首先生成了2k+1的所有奇数,然后根据Sundaram猜想(证明出自Sundaram的名字)判断出2k+1是否为素数,最后返回所有素数集合。

算法实现

以下是一个用Python实现的Sundaram筛的代码片段:

def sundaram_sieve(n):
    """
    生成所有小于n的素数
    """
    k = (n - 2) // 2
    nums = list(range(1, k+1))
    for i in range(len(nums)):
        j = i
        while i + j + 2 * i * j < k:
            nums[i + j + 2 * i * j] = 0
            j += 1
    return [2] + [2 * i + 1 for i in nums if i]

该算法的时间复杂度为O(nlog(log(n))),足以处理较大的n值。

总结

Sundaram筛是一种简单而高效的查找素数的算法,尤其适用于处理大量素数的情况。由于其原理简单易懂,代码实现也比较容易,因此在某些编程竞赛或任务中也有一定应用。