大整数的分割(模数)(最多200位)

时间:2017-07-15 10:46:28

标签: algorithm math integer pascal division

我使用Miller–Rabin primality test在Pascal中编写素数生成器(最多200位)。

我已经实现了多个步骤,但我遇到了模幂运算部分。我选择Right-to-left binary method其中(我假设)我必须实现A mod B,其中A和B都是(最差情况下是200位)。为了计算模数,我必须实现最多200位数的2个数的除法。我在一个数组中重新呈现我的长整数,其中每个元素都是一个数字(0-9)。

我用谷歌搜索了,我没有为我找到任何合适的算法(这不会花费很多时间来实现)。所以我在这里问是否有人有这方面的经验。我不一定是最快的算法,但它不应该是" dumb"作为欧几里得的分裂,需要数年才能实现。我不想使用任何库(纯帕斯卡)

2 个答案:

答案 0 :(得分:1)

读取this answer以获得快速乘法,并this page读取更慢但更容易理解的乘法。使用该乘法算法读取this page以进行快速划分。时间复杂度将与乘法的时间复杂度成正比。

答案 1 :(得分:0)

谢谢大家的回复。我决定使用divison使用二进制搜索,如Division (modulus) of large integers (max 200 digits)我意识到它可能不是我想要的,因为总体来说我的模幂运算对于较大的数字(60 +数字)来说很慢但算法非常简单