2

WingIDE 101(バージョン 4) の Windows 7 OS で Python 3.2 を実行しています。この場合、環境はそれほど重要ではありませんが、具体的にする必要があると考えました。

私のコードは次のとおりです。これは最適であることを意図したものではなく、素数を見つける方法の 1 つにすぎません。

def isPrime2(n):
  if n == 1:
      return False  
  count = 0
  for i in range(2,n+1,2):
    if n%i == 0:
      count = count + 1
      if count > 2:
        return False
  for i in range(1,n+1,2):
    if n%i == 0:
      count = count + 1
      if count > 2:
        return False         
  if count == 2:
    return True

start = time.time()
x = isPrime2(571)
end = time.time()
time_interval = end - start
print("%1.15f"%time_interval)
print(x)

私が抱えている問題は、 time.time() 関数がタイミングを合わせていないように見えることです。このプログラムを実行すると、

0.000000000000000
True

これも30桁まで試してみましたが、すべてゼロのままでした。

複数の For ループがあることを考えると、私のプログラムがこれほど速いわけではありません。

私の質問は、なぜ私の機能が時間を計っていないのですか? または、そうである場合、そうすべきではないことを知っているのに、なぜそんなに速いのですか?

4

2 に答える 2

6

Windows では、time.clock()代わりに使用します。time.time()前者は代わりにマイクロ秒の粒度を提供しますが、1/60 秒の粒度しかありません。

または、クロスプラットフォームを維持するtimeit.default_timer()には、代わりに使用します。これにより、プラットフォームに適したtime関数が使用されます。

import timeit

start = timeit.default_timer()
于 2013-01-27T23:29:30.830 に答える
1

time.time()実際には1秒より良い解像度を保証するものではありません。timeit代わりに、解像度の高いモジュールを使用することをお勧めします。

(編集)

Examples of alternative usages for `timeit`:

n = 10000
# Method 1: using default_timer()
start = timeit.default_timer()
for i in range (n):
    x = isPrime2(571)
end = timeit.default_timer()
time_interval = (end - start)/n
print("%1.15f"%time_interval)

# Method 2: using timeit()
print("%1.15f"%(timeit.timeit('isPrime2(571)','from __main__ import isPrime2',number=n)/n))
print(x)

上記のコードはstart = time.time()、質問者のコードの行のコードを置き換え、2つの代替方法は同様のタイミングを生成します。timeitを正しく使用する方法も参照してください。

于 2013-01-27T23:24:00.237 に答える