SolaveyStrassen

This commit is contained in:
2026-01-06 15:47:38 +01:00
parent b613c8af79
commit 02549f3445
2 changed files with 29 additions and 1 deletions

28
SolaveyStrassen.hs Normal file
View File

@@ -0,0 +1,28 @@
module SolaveyStrassen (solaveyStrassen) where
import ModularArithmeticUtils (modExp, jacobi)
import System.Random (randomRIO)
solaveyStrassen :: Integer -> Integer -> IO Bool
solaveyStrassen n k
| n < 2 = return False
| n == 2 = return True
| even n = return False
| otherwise = go k
where
expHalf = (n - 1) `div` 2
go 0 = return True
go i = do
a <- randomRIO (2, n - 2)
if gcd a n /= 1
then return False
else do
let x = modExp a expHalf n
j = jacobi a n `mod` n
if x /= j
then return False
else go (i - 1)