Algorithm 费马与梅森作为模量

Algorithm 费马与梅森作为模量,algorithm,modulus,Algorithm,Modulus,所以在一些数论应用中,我们需要对大数进行模运算,我们可以选择模。有两个小组可以得到巨大的优化——Fermat和Mersenne 让我们把N位序列称为块。N通常不是单词大小的倍数 对于费马,我们有M=2^N+1,所以2^N=-1 mod M,所以我们取被除数的部分,交替进行加法和减法 对于Mersenne,我们有M=2^N-1,所以2^N=1 mod M,所以我们对股息的各个部分求和 在任何一种情况下,我们都可能得到一个占据2个数据块的数字。如果需要,我们可以再次应用这个算法,最后做一个通用的模算

所以在一些数论应用中,我们需要对大数进行模运算,我们可以选择模。有两个小组可以得到巨大的优化——Fermat和Mersenne

让我们把N位序列称为块。N通常不是单词大小的倍数

对于费马,我们有M=2^N+1,所以2^N=-1 mod M,所以我们取被除数的部分,交替进行加法和减法

对于Mersenne,我们有M=2^N-1,所以2^N=1 mod M,所以我们对股息的各个部分求和

在任何一种情况下,我们都可能得到一个占据2个数据块的数字。如果需要,我们可以再次应用这个算法,最后做一个通用的模算法

由于交替加减,费马将使结果平均更小。负结果在计算上并不昂贵,只需跟踪符号并在最后的模步骤中修复它。但是我认为减法比加法慢一点

Mersenne对所有块进行求和,因此结果稍微大一点,但这可以通过算法的第二次迭代来解决,几乎不需要额外的成本

那么到底哪一个更快呢



除了性能之外,可能还有其他一些因素使Fermat比Mersenne更好,或者可能它只是直线上升更快。

如果您需要素数模,您将根据大小的方便性做出决定

例如,2^31-1在64位体系结构上通常很方便,因为它非常适合32位,并且其中两个的乘积适合64位字,有符号或无符号

在32位体系结构上,2^16+1具有类似的优势。当然,它不太适合16位,但是如果你把0作为一个特殊情况处理,那么在32位字中把它们相乘还是很容易的