📅  最后修改于: 2023-12-03 15:18:41.773000             🧑  作者: Mango
素数是指除了 1 和它本身以外,没有其他因数的正整数。比如,2、3、5、7、11、13 等都是素数。素数在密码学、计算机科学、数学以及其他领域中扮演着重要的角色。
判断一个数是否为素数有很多种方法,以下是几种常见的算法。
该算法的基本思想是:从 2 开始,将素数的倍数全部标记为合数,直到不再存在这样的数,则所有没有被标记的数均为素数。
def eratosthenes(n: int) -> List[int]:
primes = [True] * (n+1)
primes[0], primes[1] = False, False
for i in range(2, int(n**0.5)+1):
if primes[i]:
for j in range(i*i, n+1, i):
primes[j] = False
return [x for x in range(n+1) if primes[x]]
该算法的时间复杂度为 $O(n\log\log n)$。
该算法的基本思想是使用费马小定理,如果 $n$ 是素数,则对于任意 $a < n$,都有 $a^{n-1}\equiv 1 \pmod n$。
import random
def is_prime(n: int, k: int = 3) -> bool:
if n == 2 or n == 3:
return True
if n <= 1 or not n % 2:
return False
for _ in range(k):
a = random.randint(2, n-2)
if pow(a, n-1, n) != 1:
return False
return True
该算法虽然时间复杂度为 $O(k\log n)$,但通常情况下只需要 $O(\log n)$ 的时间就可以判断出一个数是否为素数。
素性测试是一类更加高效的算法,能够判断 $n$ 是否为素数。这些算法的基本思想是利用数学方法来快速判断一个数是否为合数。
以下是一些常见的素性测试算法:
这些算法的时间复杂度从 $O((\log n)^2)$ 到 $O(\log n)$ 不等。
素数在密码学中扮演着重要的角色。加密算法通常使用两个大素数的乘积作为密钥,这样能够有效防止攻击者通过暴力枚举的方式破解加密信息。
素数还有许多其他的应用,比如:
素数是数学中的一个重要概念,具有重要的应用价值。判断一个数是否为素数有多种方法,其中埃拉托斯特尼筛法和费马小定理是比较常用的算法。素数在密码学、数学、计算机科学等领域中扮演着重要的角色。