请你看一下我在Python中使用eratosthenes筛子的实现,并告诉我如何改进/优化它?
我是编程的初学者,所以我对如何优化它没有任何想法,如果你查看它并告诉我可以改进什么,我真的很感激。
# -*- coding: utf-8 -*-
"""
Created on Fri Sep 27 19:57:14 2013
@author: stefan
"""
def sqrt_int(n):
n = n**0.5
if n == int(n):
return True
else:
return False
def cbrt_int(n):
n = n**(1.0/3)
if n == int(n):
return True
else:
return False
def sieve(limit):
first_primes = [2,3,5,7]
primes = [x for x in range (2,limit+1)]
for y in first_primes:
primes = filter(lambda x: x % y != 0, primes)
primes = filter(lambda x: not sqrt_int(x), primes)
primes = filter(lambda x: not cbrt_int(x), primes)
if limit > 10:
primes = first_primes + primes
else:
primes = filter(lambda x: x <= limit, first_primes)
return primes
答案 0 :(得分:0)
以下是Eratosthenes筛选的简单版本:
def primes(n): # sieve of eratosthenes
ps, sieve = [], [True] * (n + 1)
for p in range(2, n + 1):
if sieve[p]:
ps.append(p)
for i in range(p * p, n + 1, p):
sieve[i] = False
return ps
有一些方法可以让它在没有太多复杂性的情况下更快地运行。如果您对素数编程感兴趣,我谦虚地在我的博客上推荐this essay。