1

Python 2.7 でふるいを使用して、すべての素数の合計を取得しようとしています。ただし、プログラムを実行すると、毎回 0 になります。なぜこれが起こっているのか分かりません。

import math,time

start=time.clock()

def primesieve(limit):
  final=0
  a=[True]*limit
  a[0]=a[1]=False
  for i,isprime in enumerate(a):
    if isprime:
      for n in xrange(i,limit,i):
        a[n]=False
  for i in xrange(limit):
    if a[i]:
        final=final+i
  return final

print primesieve(2000000)

elapsed=time.clock()-start

print elapsed
4

2 に答える 2

2

この関連トピックを見てください: N 以下のすべての素数を一覧表示する最速の方法 Fastest sieve below 8 * 10^8 は、@Robert William Hanks によってコード化された rwh_prime1 です。

'''Robert William Hanks 2010'''
def primes1(n):
    """ Returns  a list of primes < n """
    sieve = [True] * (n/2)
    for i in xrange(3,int(n**0.5)+1,2):
        if sieve[i/2]:
            sieve[i*i/2::i] = [False] * ((n-i*i-1)/(2*i)+1)
    return [2] + [2*i+1 for i in xrange(1,n/2) if sieve[i]]
于 2013-09-22T14:28:22.457 に答える