Bonjour à tous (et à toutes),

Je me suis plongé dans le codage de multiplication rapide, et j'ai commencé par karatsuba, dont voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import time
import gmpy2
from gmpy2 import mpz
 
start = time.time()
 
 
def karatsuba(m, n):
    if (m < 10 or n < 10):
        return m * n
    else:
        mstring = str(mpz.num_digits(mpz(m)))
        nstring = str(mpz.num_digits(mpz(n)))
 
        k = max(len(mstring), len(nstring))
        mid = int(k / 2)
 
        a = int(mstring[:-mid])
        c = int(nstring[:-mid])
 
        b = int(mstring[-mid:])
        d = int(nstring[-mid:])
 
        ac = karatsuba(a, c)
        bd = karatsuba(b, d)
        ad_plus_bc = karatsuba(a + b, c + d) - ac - bd
 
        return ac * 10 ** (2 * mid) + ad_plus_bc * 10 ** (mid) + bd
 
 
print("Answer is:")
print(karatsuba(pow(mpz(2), mpz(12528)), pow(mpz(2), mpz(12527))))
end = time.time()
print(end - start)
Pour les nombres dans le code, ça me dit : "ValueError: invalid literal for int() with base 10: ''"
C'est comme si à un moment donné il convertissait en entier un caractère, ce qui ne devrait pas arriver
Je précise qu'avec d'autres nombres cela n'arrive pas.

J'ai beau regarder le code, je ne comprend pas l'erreur que j'ai pu faire, donc si une bonne âme avait la gentillesse d'y jeter un oeil

Merci !