• R/O
• SSH

## Commit

##### Tags

A small kernel of code for playing with Galois fields of arbitrary characteristic

### Commit MetaInfo

Révision 3a540f0c7c8298fd11a175ca698d7f9dfc356b82 (tree) 2021-03-15 14:38:04 Eric Hopper Eric Hopper

### Message de Log

Merge local commits with commits from laptop.

### Modification

diff -r 568df9626320 -r 3a540f0c7c82 numtheory_utils.py
--- a/numtheory_utils.py Sun Mar 14 22:37:21 2021 -0700
+++ b/numtheory_utils.py Sun Mar 14 22:38:04 2021 -0700
 @@ -1,4 +1,13 @@ 1 1 def extended_gcd(x, y): 2 + """Return a tuple 't' with three elements such that: 3 + t[0) * x + t * y == t 4 + 5 + t will be either 0 or 1. If it is zero, then x and y are not 6 + relatively prime. If it is one, then they are. 7 + 8 + This makes use of Euclid's algorithm for finding the GCD, but extends it 9 + to keep track of the extra data returned in t and t. 10 + """ 2 11 sx = 1 if x > 0 else -1 3 12 x = abs(x) 4 13 sy = 1 if y > 0 else -1
 @@ -54,3 +63,18 @@ 54 63 result = op(a, b) 55 64 print(f' {result:{width}} |', end='') 56 65 print() 66 + 67 + 68 +def print_mult_inverses(a, b): 69 + """Prints out the multiplicative inverse of a (mod b) and the multiplicative 70 + inverse of b (mod a). 71 + """ 72 + am, bm, g = extended_gcd(a, b) 73 + if g == 0: 74 + raise ValueError(f"{a} and {b} are not relatively prime.") 75 + if am < 0: 76 + am = b + am 77 + if bm < 0: 78 + bm = a + bm 79 + print(f"{a} * {am} % {b} == {a * am % b}"\ 80 + f"\n{b} * {bm} % {a} == {b * bm % a}")