| modinv, modsqrt {numbers} | R Documentation |
Modular Inverse and Square Root
Description
Computes the modular inverse of n modulo m.
Usage
modinv(n, m)
modsqrt(a, p)
Arguments
n, m |
integer scalars. |
a, p |
integer modulo p, p a prime. |
Details
The modular inverse of n modulo m is the unique natural
number 0 < n0 < m such that n * n0 = 1 mod m. It is a
simple application of the extended GCD algorithm.
The modular square root of a modulo a prime p is a number
x such that x^2 = a mod p. If x is a solution, then
p-x is also a solution module p. The function will always
return the smaller value.
modsqrt implements the Tonelli-Shanks algorithm which also works
for square roots modulo prime powers. The general case is NP-hard.
Value
A natural number smaller m, if n and m are coprime,
else NA. modsqrt will return 0 if there is no solution.
See Also
Examples
modinv(5, 1001) #=> 801, as 5*801 = 4005 = 1 mod 1001
Modinv <- Vectorize(modinv, "n")
((1:10)*Modinv(1:10, 11)) %% 11 #=> 1 1 1 1 1 1 1 1 1 1
modsqrt( 8, 23) # 10 because 10^2 = 100 = 8 mod 23
modsqrt(10, 17) # 0 because 10 is not a quadratic residue mod 17
[Package numbers version 0.8-5 Index]