0

指数モジュロを計算するためにpow関数にかかる時間を計算しようとしています。g、x、pの値をハードコードすると、コードはエラーになり、pow関数に値を配置すると、コードがハングします。time()とclock()を使用してこのコードにかかる時間を計算しているとき、同じコードが効率的に機能しています。精度が欲しかったので、clock()関数とtime()関数でテストした後、timeitモジュールに移動しました。

このコードは、意味のあるpow(2、3、5)などの小さな値で正常に機能します。timeitモジュールを使用して時間を計算する効率をどのように改善できますか。

また、私はPythonの初心者です。コードに愚かな間違いがあった場合は、ご容赦ください。

import math
import random
import hashlib
import time
from timeit import Timer

g = 141802876407053547664378835005750805370737584038368838959151050908654130616798415530564917923311706921535439557793280725844349256960807398107370211978304
x = 1207729835787890214
p = 4870352607375058055471602136317178172283784073796673298937466544646468718314482464390112574915498953621226853454222898392076852427324057496200810018794472


t = Timer('pow(g,x,p)', 'import math')

z = t.timeit()
print ('the value of z is: '), z

ありがとう

4

1 に答える 1

4

ここには 2 つの問題があります。

  1. からグローバルに直接アクセスすることはできませんtimeit:この質問を参照してください。これを使用してエラーを修正できます。

    t = Timer('pow(g,x,p)', 'from __main__ import g,x,p')
    

    または、数値を文字列に直接入れます。

  2. デフォルトでは、timeit モジュールは 1000000 回の反復を実行しますが、ここでは時間がかかりすぎます。反復回数は次のように変更できます。

    z = t.timeit(1000)
    

    これにより、ハングアップのように見えることを防ぐことができます (ただし、実際には非常に長い計算です)。

于 2010-06-29T10:18:41.383 に答える