素数又被称质数(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》一书
时间: 2024-11-01 01:12:04