也许这是一个愚蠢的问题,但我想知道你是否可以提供用Python查找素数的最短来源。
我还想知道如何使用 map() 或 filter() 函数查找素数。
谢谢 (:
编辑:当我说最快/最短时,我的意思是使用较少字符/单词的方式。无论如何,不要考虑竞争:我想知道是否有可能是单行源,而不删除始终与 for 循环一起使用的缩进。
编辑2:这个问题并没有被考虑到巨大的数字。我认为我们可以保持在一百万以下(范围(2,1000000)
编辑3:最短,但仍然优雅。正如我在第一个编辑中所说,您不需要将变量名称减少为单个字母。我只需要一行,优雅的源代码。
谢谢你!
The 埃拉托斯特尼筛法 http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes分两行。
primes = set(range(2,1000000))
for n in [2]+range(3,1000000/2,2): primes -= set(range(2*n,1000000,n))
编辑:我意识到上面的方法并不是真正的埃拉托斯特尼筛法,因为它过滤的是奇数集而不是素数集,这使得它不必要地变慢。我已在以下版本中修复了该问题,并且还包含了评论中指出的一些常见优化。
primes = set([2] + range(3, 1000000, 2))
for n in range(3, int(1000000**0.5)+1, 2): primes -= set(range(n*n,1000000,2*n) if n in primes else [])
第一个版本仍然较短,并且确实生成了正确的结果,即使需要更长的时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)