标签:
素数又被称质数(Prime number)指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。大于1的自然数若不是素数,则称之为合数。
用python实现判断一个数字是否为素数。
第一种方法整除法,通过对数字范围以内的数字进行循环整除,效率很低,数字大的时候耗时,代码实现:
def is_prime(n):
if n == 2:
return True
if n % 2 == 0 or n <= 1:
return False
sqr = int(math.sqrt(n)) + 1
for divisor in range(3, sqr, 2):
if n % divisor == 0:
return False
return True
第二种方法是用算法优化整个逻辑与执行流程,筛选出n以内的所有素数,原理是通过定义一个数组,生成 n*True 个元素,代码实现:
def prime_sieve(n):
sieve_lst = [True] * n
sieve_lst[0] = False # 第一个和第二个不是素数,设为False
sieve_lst[1] = False
for i in range(3, int(math.sqrt(n))+1):
pointer = i *2 # 对n数字以内的倍数,全部设为False
while pointer < n:
sieve_lst[pointer] = False
pointer += i
primes = []
for x in range(n):
if sieve_lst[x]:
primes.append(i)
print primes
return primes
prime_sieve(33)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
此算法来源于 《Hacking Secret Ciphers with Python》一书
标签:
原文地址:http://www.cnblogs.com/starsea/p/5639434.html