Skip to content

Don't use mpz_powm()#187

Merged
skirpichev merged 2 commits intodiofant:masterfrom
skirpichev:no-mpz_powm/169
Jul 21, 2025
Merged

Don't use mpz_powm()#187
skirpichev merged 2 commits intodiofant:masterfrom
skirpichev:no-mpz_powm/169

Conversation

@skirpichev
Copy link
Copy Markdown
Member

Closes #169

@skirpichev skirpichev marked this pull request as ready for review July 21, 2025 09:19
@skirpichev skirpichev enabled auto-merge July 21, 2025 10:23
@skirpichev
Copy link
Copy Markdown
Member Author

No measurable difference with benchmark:

# bench.py
import pyperf
import random
from gmp import mpz

random.seed(1)
lbits = 64
runner = pyperf.Runner()
a, b, c = 123, 11, 7
runner.bench_func(f'pow({a}, {b}, {c})', pow, a, b, c)
c *= 4
runner.bench_func(f'pow({a}, {b}, {c})', pow, a, b, c)
a, b, c = map(mpz, (random.randint(1<<(7*lbits), 1<<(11*lbits))
                    for _ in range(3)))
mbits = max(map(lambda x: x.bit_length(), [a, b, c]))
runner.bench_func(f'pow(a, b, c) with max {mbits}-bits', pow, a, b, c)

@skirpichev skirpichev merged commit 94029d8 into diofant:master Jul 21, 2025
16 checks passed
@skirpichev skirpichev deleted the no-mpz_powm/169 branch July 21, 2025 10:39
@skirpichev skirpichev added this to the 0.4 milestone Feb 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Don't use mpz_powm() for even modulus in zz_powm()

1 participant