首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell中的素性检验

Haskell中的素性检验
EN

Stack Overflow用户
提问于 2013-06-11 03:41:28
回答 1查看 412关注 0票数 1

我在Haskell中有以下代码。我想对给定的数字n重复30次费马质数测试,但问题是它总是返回False…我试图解决这个问题,但我总是得到错误的answers..Any想法?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-11 03:59:37

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17031529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档