Haskell中的Primality测试

时间:2013-06-10 19:41:28

标签: haskell

我在Haskell中有以下代码。我想对给定的数字n重复30次费马素性测试,但问题是它总是返回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)

1 个答案:

答案 0 :(得分:5)

你的整数被截断了。 Haskell中的“Int”不是大整数类型。将所有“Int”类型声明更改为“Integer”,您的代码应该可以正常工作。