本篇为大家提供的Python源码是算法相关的:Python筛法求质数(素数)的生成器示例。需要用到math模块的方法。
Python筛法求质数(素数)的生成器的基本思路如下:好比用筛法求素数,用筛法求素数的基本思想是:把从1开始的某一范围内的正整数从小到大顺序排列。因为1不是素数,所以首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推直到筛子为空时结束。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import math
def gen_sieve(ceiling=None):
if ceiling is not None:
if ceiling % 2 == 0:
ceiling -= 1
highest_prime = math.ceil(math.sqrt(ceiling))
last_val = 1
found_primes = []
yield 2
while ceiling is None or ceiling > last_val:
current_val = None
while current_val is None:
current_val = last_val = last_val + 2
for prime, square in found_primes:
if current_val < square:
break
if current_val % prime == 0:
current_val = None
break