筛法生成质数(素数)的生成器

切换背景色
主题: 字体: 切换行号 全选代码块(Ctrl+C复制) 半瓶墨水6个月前贴出, Python 语言
Python代码: 筛法生成质数(素数)的生成器
01 #!/usr/bin/python
02 # -*- coding: utf-8 -*-
03 # from: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/535154
04 import math
05
06 def gen_sieve(ceiling=None):
07     if ceiling is not None:
08         if ceiling % 2 == 0:
09             ceiling -= 1
10         highest_prime = math.ceil(math.sqrt(ceiling))
11     last_val = 1
12     found_primes = []
13     yield 2
14     while ceiling is None or ceiling > last_val:
15         current_val = None
16         while current_val is None:
17             current_val = last_val = last_val + 2
18             for prime, square in found_primes:
19                 if current_val < square:
20                     break
21                 if current_val % prime == 0:
22                     current_val = None
23                     break
24         yield current_val
25         if ceiling is None or highest_prime > last_val:
26             found_primes.append((current_val, current_val ** 2))
27
28 def isprime(n):
29     for fac in gen_sieve(int(math.ceil(math.sqrt(n)))):
30         if n % fac == 0 and n != fac:
31             return fac
32     return 0
返回正常查看模式 返回代码发芽网首页