Haskell中的素性检验

Haskell中的素性检验,haskell,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) =((

我在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)

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

整数将被截断。Haskell中的Int不是大整数类型。将所有int类型声明更改为整型,代码应该工作。

代码中间的unSeabPrimIoo应该闪烁亮红色。这不是一个适当的使用unSeabPrimoIO——你应该使用一个CF。你的代码中的UnSeabPrimeIO应该闪亮。这不是unsafePerformIO的适当用法-您应该使用cf。