Web log de Serge Boisse
On line depuis 1992 !
cf https://fr.wikipedia.org/wiki/Algorithme_de_Karatsuba
et The Genius Way Computers Multiply Big Numbers (video Youtube)
sa version optimisée (et en binaire !) est implémentée dans les compilateurs C++, python, javascript...
import math
def number_of_digits(number: int) -> int:
return int(math.log10(abs(number))) + 1
def multiply(x: int, y: int) -> int:
# We CAN multiply small numbers
if abs(x) < 10 or abs(y) < 10:
return x * y
# Calculate the size of the numbers
digits = max(number_of_digits(x), number_of_digits(y))
midpoint = 10 ** (digits // 2)
# Split digit sequences in the middle
high_x = x // midpoint
low_x = x % midpoint
high_y = y // midpoint
low_y = y % midpoint
# 3 recursive calls to numbers approximately half the size
z0 = multiply(low_x, low_y)
z1 = multiply(low_x + high_x, low_y + high_y)
z2 = multiply(high_x, high_y)
return (z2 * midpoint**2) + ((z1 - z2 - z0) * midpoint) + (z0)
print(multiply(2**50, 3**50)) # 808281277464764060643139600456536293376
Au lieu de couper simplement les bits en deux, on découpe les deux nombres en k morceaux de longueur l sur lesquels les multiplications sont faites récursivement.
https://fr.wikipedia.org/wiki/Algorithme_Toom-Cook
https://en.wikipedia.org/wiki/Toom%E2%80%93Cook_multiplication
page créée le 18/03/2025 à 15:09
modifiée le 25/05/2025 à 12:07
Commentaires (0) :
Page :Ajouter un commentaire (pas besoin de s'enregistrer)
En cliquant sur le bouton "Envoyer" vous acceptez les conditions suivantes : Ne pas poster de message injurieux, obscène ou contraire à la loi, ni de liens vers de tels sites. Respecter la "netiquette", ne pas usurper le pseudo d'une autre personne, respecter les posts faits par les autres. L'auteur du site se réserve le droit de supprimer un ou plusieurs posts à tout moment. Merci !Ah oui : le bbcode et le html genre <br>, <a href=...>, <b>b etc. ne fonctionnent pas dans les commentaires. C'est voulu.