Journal d'un Terrien

Web log de Serge Boisse

On line depuis 1992 !

Publicité
Si cette page vous a plu, Copiez son adresse et partagez-la !
http://sboisse.free.fr/science/maths/nombres/algorithme de Karatsuba.php
Savez-vous quels sont les articles les plus vendus sur Amazon.fr ?
algorithme de Karatsuba
science > maths > nombres > algorithme de Karatsuba

Algorithme de Karatsuba pour la multiplication rapide de grands nombres

code python (en base 10)

; le code ci-dessous n'est pas optimisé pour le calcul rapide, mais permet de comprendre comment fonctionne l'algorithme ;

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

généralisation : algorithme de Toom-Cook

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.

Voir aussi :


page créée le 18/03/2025 à 15:09
modifiée le 25/05/2025 à 12:07
Publicité
Commentaires

Commentaires (0) :

Page :



Ajouter un commentaire (pas besoin de s'enregistrer)

Pseudo :
Message :


image de protection
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.
< Retour en haut de la page