fermat primality test

This commit is contained in:
2025-12-23 23:03:22 +01:00
parent cb41957ed9
commit 2fdddbc129

15
fermat-prime-test.hs Normal file
View File

@@ -0,0 +1,15 @@
import System.Random (randomRIO)
import ModularArithmeticUtils (modExp)
fermatPrimeTest :: Integer -> Integer -> IO Bool
fermatPrimeTest n k
| n <= 3 = return (n == 2 || n == 3)
| even n = return False
| otherwise = go k
where
go 0 = return True
go i = do
a <- randomRIO (2, n - 2)
if modExp a (n - 1) n /= 1
then return False
else go (i - 1)