我在Haskell中有以下代码.我想重复30次Fermat素性测试给定的数字n,但问题是它总是返回False ...我试图修复问题但我总是得到错误的答案.任何想法?
import System.Random
import System.IO.Unsafe
takeARandomNum n=unsafePerformIO (getStdRandom (randomR (2,n)))
fermatTestA :: (Int, Int) -> Bool
fermatTestA (n, a) =((a^(n-1) `mod` n)==1)
solve :: (Int, Int) -> Bool
solve (n, 1) = fermatTestA (n, takeARandomNum (n-2))
solve (n, maxTest)
| fermatTestA (n, takeARandomNum (n-2)) = (solve (n, (maxTest-1)))
| otherwise = False
fermatTest :: Int ->Bool
fermatTest n = solve (n, 30)
Run Code Online (Sandbox Code Playgroud)