📅  最后修改于: 2023-12-03 15:27:28.097000             🧑  作者: Mango
在数学中,素数(prime number)指的是大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数。也就是说,只有被1和它本身整除的数才能被称为素数。
素数被广泛地应用于计算机科学和密码学等领域中,主要因为它们具有不可分解性和不可重复性。在密码学中,素数的特性被用来构造公钥密码系统,例如RSA。
下面是一个简单的 Python 程序,用于求取小于等于给定数值 n
的所有素数。这个程序使用了试除法,逐个测试每个自然数是否为素数。
def get_all_primes(n):
"""
返回小于等于给定数值n的所有素数
"""
primes = []
for num in range(2, n+1):
is_prime = True
for i in range(2, int(num**0.5)+1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
return primes
上面的程序首先初始化了一个空列表 primes
,用于存储找到的所有素数。然后它逐个测试从2到n的每个自然数是否为素数,如果是素数则将其加入到 primes
列表中。为了测试一个自然数是否为素数,程序通过试除法测试从2到该自然数的平方根范围内的所有数字是否能被整除。
这个程序可以很容易地扩展,以便只返回第n个素数或在给定范围内返回随机的素数。
def get_nth_prime(n):
"""
返回第n个素数
"""
primes = []
num = 2
while len(primes) < n:
is_prime = True
for i in range(2, int(num**0.5)+1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
num += 1
return primes[-1]
from random import randrange
def get_random_prime(start, stop):
"""
返回在指定范围内的随机素数
"""
num = 0
while num < start or num > stop or not is_prime(num):
num = randrange(start, stop+1)
return num
上面的两个函数分别返回第n个素数和任意一个在指定范围内的随机素数。get_nth_prime
通过逐个加上自然数并测试其是否为素数的方式,一直循环直到找到第n个素数为止。get_random_prime
使用 randrange
函数随机生成在指定范围内的自然数,然后反复测试直到找到第一个素数。注意,这里的 is_prime
函数在下面的代码片段中给出。
def is_prime(n):
"""
测试给定数值是否为素数
"""
if n <= 1:
return False
elif n <= 3:
return True
elif n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
上面的 is_prime
函数使用了更加高效的算法,可以更快地测试一个给定的数值是否为素数。
本文介绍了如何使用 Python 来求取素数,包括求取小于等于给定数值的所有素数、求取第n个素数、以及在给定范围内随机返回一个素数。这些函数可以很方便地用于计算机科学和密码学等领域中,例如生成公钥密码系统的密钥。