fermat primality test
This commit is contained in:
15
fermat-prime-test.hs
Normal file
15
fermat-prime-test.hs
Normal 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)
|
||||
Reference in New Issue
Block a user