【发布时间】:2012-12-07 08:57:24
【问题描述】:
我根据维基百科页面上指定的基本算法在 Haskell 中实现了二次筛。它对大多数整数都很有效,但是它无法找到对 n 次幂的数字 N 的因式分解。对于偶数幂(平方),算法循环,对于奇数幂,我找到了几个平方模 N 的平滑数(我已经测试并证实了这一点),但是每个派生的平方同余(也测试和证实)只会导致一个微不足道的因素。
我有理由确定我已经实现了 Wikipedia 算法。该版本的算法是否存在问题,无法处理 n 次幂,或者我的算法中是否存在错误?
由于某种原因,stackoverflow 在格式化我的代码时遇到了问题,所以你去吧:http://pastebin.com/miUxHKCh
【问题讨论】:
-
发布代码,以便我们判断您的实现。
-
好的,我可以,但这是相当多的代码。在开始寻找错误之前,我想看看维基百科版本是否存在概念/理论问题。
-
好的,我发布了代码链接。该文件中未定义的代码调用的所有函数都经过了相当彻底的测试。
psqrt(找到二次余数 mod p)可以工作,但如果模不是素数(但我只在模数肯定是素数的地方)使用它,则具有未定义的行为。我的猜测是问题出在doSieve或sieve' -
unSquare看起来它会无限循环0和1。 -
cs = ceiling $ (sqrt :: Float -> Float) $ fromIntegral nDouble,Float将你限制在相当小的n。