Programme Python simple pour effectuer des opérations d'algèbre à l'aide d'algorithmes efficaces comme l'algorithme de Karatsuba pour la multiplication ou l'algorithme euclidien étendu pour un grand diviseur commun (GCD).
Ce programme est destiné à être léger (pas de dépendances) et très efficace.
pip install PyAlgebraLibVous pouvez importer le module:
import PyAlgebraLib as paPeut fonctionner avec des nombres de la base 2 à la base 16. Sans conversion entre les bases de chaque opération.
Remarque: chaque numéro doit être entré et sera renvoyé sous forme de chaîne, à l'exception de la base.
pip install PyAlgebraLibVous pouvez importer le module:
import PyAlgebraLib as paEnsuite, vous pouvez effectuer des opérations comme:
pa . karatsuba ( "364da" , "-13f" , 16 ) # Multiplication (karatsuba algorithm)
pa . extEuclid ( "-1460" , "44321521" , 7 ) # GCD (Extended)La sortie est une chaîne ou un tuple avec le (s) résultat (s), examinez les docstrings de fonction spécifiques pour plus d'informations.
Exemple:
pa . extEuclid ( "-1460" , "44321521" , 7 )
# Output: ('1', '-20066304', '511')
pa . modularInversion ( "9a1aa8a02232" , "a6a722a" , 11 )
# Output: '3293845' - Addition
- Subtraction
- Multiplication (Normal "primary school method" + Karatsuba algorithm)
- Division
- GCD of 2 numbers (Extended Euclidean algorithm)
- Modular Arithmetic:
- Reduction
- Addition
- Subtraction
- Multiplication
- Inversion
| Nom de la fonction | Saisir | Sortir |
|---|---|---|
| removereadingzeros | A (str) | STR: La chaîne modifiée avec tous les zéros principaux supprimés |
| plus grande | x (str), y (str) | bool: vrai si x est supérieur ou égal à y, faux sinon |
| diviser | x (str), y (str), r (int) = 10 | Str: Le quotient de x divisé par y, exprimé dans Radix R |
| elemperaryAdd | x (str), y (str), c (str), r (int) = 10 | Tuple: (résultat (str), transport (str)) |
| élémentaire | x (str), y (str), c (str), r (int) = 10 | Tuple: (résultat (str), transport (str)) |
| élémentaire | x (str), y (str), z (str), c (str), r (int) = 10 | Tuple: (résultat (str), transport (str)) |
| ajouter | x (str), y (str), r (int) = 10 | Str: Résultat de x + y dans Radix R |
| soustraire | x (str), y (str), r (int) = 10 | Str: Résultat de x - y dans Radix R |
| multiplier | x (str), y (str), r (int) = 10 | Str: Résultat de x * y dans Radix R |
| karatsuba | x (str), y (str), r (int) = 10 | Str: Résultat de x * y en utilisant l'algorithme de Karatsuba dans Radix R |
| extéuclide | x (str), y (str), r (int) = 10 | tuple: (gcd (str), a (str), b (str))) |
| réduction modulaire | n (str), m (str), r (int) = 10 | Str: Résultat de N Mod M dans Radix R |
| modularAddition | x (str), y (str), m (str), r (int) = 10 | str: résultat de (x + y) mod m dans radix r |
| substraction modulaire | x (str), y (str), m (str), r (int) = 10 | str: résultat de (x - y) mod m dans radix r |
| MulularMultiplication | x (str), y (str), m (str), r (int) = 10 | str: résultat de (x * y) mod m dans radix r |
| modular inversion | a (str), m (str), r (int) = 10 | STR: Inverse d'un mod m dans Radix R, ou imprime "inverse n'existe pas" |