(注: 私は GMPY の維持に協力しており、最新のリリースではかなりの数の最適化を実装しています。)
GMPY v1.11 はmpz_add_ui
、mpz に小さな数を追加するときに使用します。また、GMPY の最新バージョンは、小さい数を処理する場合、以前のバージョンよりも約 25% 高速です。
With GMPY 1.04
$ py26 -mtimeit -s "import gmpy;a=gmpy.mpz(10**1000)" "a+1"
10000000 loops, best of 3: 0.18 usec per loop
$ py26 -mtimeit -s "import gmpy;a=gmpy.mpz(10**1000);b=gmpy.mpz(1)" "a+b"
10000000 loops, best of 3: 0.153 usec per loop
With GMPY 1.11
$ py26 -mtimeit -s "import gmpy;a=gmpy.mpz(10**1000)" "a+1"
10000000 loops, best of 3: 0.127 usec per loop
$ py26 -mtimeit -s "import gmpy;a=gmpy.mpz(10**1000);b=gmpy.mpz(1)" "a+b"
10000000 loops, best of 3: 0.148 usec per loop
Python int を long に変換して呼び出すmpz_add_ui
方が、Python int を mpz に変換するよりも高速であるため、中程度のパフォーマンス上の利点があります。long long でネイティブ操作に対して GMP 関数を呼び出すと、パフォーマンスが 10 倍低下しても驚かないでしょう。
いくつかの小さな数を 1 つの長い長い数に累積し、それらを一度に大きな数に追加できますか?