From 2fdddbc129b7621737a9fc75b63b34021352e70a Mon Sep 17 00:00:00 2001 From: Sam HADOW Date: Tue, 23 Dec 2025 23:03:22 +0100 Subject: [PATCH] fermat primality test --- fermat-prime-test.hs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 fermat-prime-test.hs diff --git a/fermat-prime-test.hs b/fermat-prime-test.hs new file mode 100644 index 0000000..ec99576 --- /dev/null +++ b/fermat-prime-test.hs @@ -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)