使用euler的totient和中文余数定理在Java中进行模幂运算

时间:2012-11-08 01:41:18

标签: java rsa primes exponentiation chinese-remainder-theorem

编辑 - 澄清

我正在尝试使用lagrange和中文余数定理在Java中实现模幂运算。

例如,如果N是55,已经给出了素数因子5和11,则phi是40,所以我知道在N低于55时有40个数字共同素数。我的导师说这样做的方法是“使用拉格朗日定理,以5和11为模的几次乘法和CRT结合两种结果“

我的问题是如何计算这些数字?我需要他们把它们放入一个中国余数定理来完成计算,但我想不出一个聪明的方法来使用phi(n)作为结果循环N. N将是一个非常大的数字,至少1024位。我可能在这里错误的轨道,我甚至需要所有这些素数吗?

我怀疑答案是否与扩展的euclid功能有关,我已经编码了,所以如果我需要使用它的结果那就没问题。

我不理解How many numbers below N are coprimes to N?中的代码,所以对我没什么帮助,我看到的数学论文很难理解,总和和产品类型符号让我感到困惑。此外,一些答案使用平方根和日志,这对BigInteger来说并不是一个真正的选择(如果我错了,请纠正我)

有人能用简单的英语给我答案吗?

向我展示代码是可以的,这更像是一次学习练习,因为我要提交的答案使用蒙哥马利。 (是的,我知道,奇怪的是,我可以用数学公式计算蒙哥马利但是这个拉格朗日加CRT让我感到非常困惑)

我已经得到了这个,通过我发现的一个例子。主要因素是七和五,所以35的phi是24(我有一个工作的Euler totient函数)。

2 个答案:

答案 0 :(得分:1)

有关已完成的示例,请参阅this answer。它通过对模数因子进行模运算,并将结果组合起来,准确地显示了如何以模块化方式模拟复合模型。

答案 1 :(得分:0)

要找到所有与N互质的数字,只需在[1,N]上迭代euclid GCD()算法。如果GCD(a,N)== 1则a,N是互质的