-2

Python でのエラトステネスのふるいの実装を見て、それを改善/最適化する方法を教えてください。

私はプログラミングの初心者なので、最適化する方法がわかりません。チェックして改善できる点を教えていただければ幸いです。

# -*- 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
4

1 に答える 1

0

これは、エラトステネスのふるいのはるかに単純なバージョンです。

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

あまり複雑にせずに高速に実行する方法があります。素数を使ったプログラミングに興味がある場合は、私のブログでこのエッセイをお勧めします。

于 2013-09-27T19:27:06.097 に答える