Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
24
Task/Modular-inverse/8th/modular-inverse.8th
Normal file
24
Task/Modular-inverse/8th/modular-inverse.8th
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
\ return "extended gcd" of a and b; The result satisfies the equation:
|
||||
\ a*x + b*y = gcd(a,b)
|
||||
: n:xgcd \ a b -- gcd x y
|
||||
dup 0 n:= if
|
||||
1 swap \ -- a 1 0
|
||||
else
|
||||
tuck n:/mod
|
||||
-rot recurse
|
||||
tuck 4 roll
|
||||
n:* n:neg n:+
|
||||
then ;
|
||||
|
||||
\ Return modular inverse of n modulo mod, or null if it doesn't exist (n and mod
|
||||
\ not coprime):
|
||||
: n:invmod \ n mod -- invmod
|
||||
dup >r
|
||||
n:xgcd rot 1 n:= not if
|
||||
2drop null
|
||||
else
|
||||
drop dup 0 n:< if r@ n:+ then
|
||||
then
|
||||
rdrop ;
|
||||
|
||||
42 2017 n:invmod . cr bye
|
||||
Loading…
Add table
Add a link
Reference in a new issue