QUICK REVIEW
[论文解读] An O(M(n) log n) algorithm for the Jacobi symbol
Richard P. Brent, Paul Zimmermann|arXiv (Cornell University)|Apr 13, 2010
Algorithms and Data Compression参考文献 2被引用 4
一句话总结
本文提出了一种 $O(M(n)\text{log }n)$ 算法,用于使用二进制递归 GCD 方法计算两个 $n$-位整数的雅克比符号,避免依赖连分数或高斯恒等式。该方法通过高效处理商序列实现亚二次时间复杂度,并表明在输入超过约 10,000 位十进制数字时,性能优于 GMP 的二次实现。
ABSTRACT
The best known algorithm to compute the Jacobi symbol of two n-bit integers runs in time O(M(n) log n), using Schönhage's fast continued fraction algorithm combined with an identity due to Gauss. We give a different O(M(n) log n) algorithm based on the binary recursive gcd algorithm of Stehlé and Zimmermann. Our implementation - which to our knowledge is the first to run in time O(M(n) log n) - is faster than GMP's quadratic implementation for inputs larger than about 10000 decimal digits.
研究动机与目标
- 开发一种用于计算两个 $n$-位整数雅克比符号的亚二次算法。
- 避免依赖施伦克的连分数算法或高斯恒等式,提供一种更简单的替代方案。
- 仅使用二进制 GCD 技术实现 $O(M(n)\log n)$ 的时间复杂度。
- 实现并基准测试该算法,表明其在大输入下相对于现有二次实现的性能优势。
- 为高性能数论计算提供一种可证明高效且实用的方法。
提出的方法
- 将施特勒和齐默尔曼的二进制递归 GCD 算法改编为直接计算雅克比符号。
- 使用正商的二进制除法以保持数值正性并确保算法终止。
- 引入一种修改后的停止准则,使算法即使在使用正商的情况下也能正确终止。
- 利用恒等式对雅克比符号进行符号变换:$(bc|a)=(b|a)(c|a)$,$(2|a)=(-1)^{(a^2-1)/8}$,以及当 $a,b$ 为奇数时 $(b|a)=(-1)^{(a-1)(b-1)/4}(a|b)$。
- 将迭代分类为良好、不良或丑陋,并将一系列“丑陋”迭代合并为一个“无害”步骤,从而将最坏情况时间复杂度降低至 $O(M(n)\log n)$。
实验结果
研究问题
- RQ1是否可以仅使用二进制 GCD 技术,在不依赖连分数或高斯恒等式的情况下,以 $O(M(n)\log n)$ 时间复杂度计算雅克比符号?
- RQ2基于二进制 GCD 的雅克比符号算法的最坏情况时间复杂度是多少?能否将其降低至 $O(M(n)\log n)$?
- RQ3该新算法与 GMP 的二次算法相比,在大输入下的性能如何?
- RQ4所提出算法每轮迭代的平均位数减少量是多少?与标准二进制 GCD 相比如何?
- RQ5该算法在实际中能否高效实现?在何种输入规模下会超越现有方法?
主要发现
- 所提算法实现了 $O(M(n)\log n)$ 的时间复杂度,达到最优理论界。
- 该算法是首个在不使用施伦克连分数算法或高斯恒等式的情况下实现此界的方法。
- 实现结果表明,当输入超过约 10,300 位十进制数字(34,240 位)时,性能优于 GMP 的二次实现。
- 对于包含一百万个 64 位字的输入,该算法耗时约 83.1 秒,执行约 4750 万轮迭代,理论位数减少速率为每轮 0.651993 位。
- 实验结果表明,约 53.33% 的迭代为良好,26.67% 为不良,20% 为无害,其分布趋近于预期启发式分布。
- 与 $O(n^2)$ 的 GMP 实现相比,该 $O(M(n)\log n)$ 实现的性能拐点出现在约 535 个字(约 34,240 位或 10,300 位十进制数字)左右。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。