编辑 - 澄清
我正在尝试使用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函数)。
答案 0 :(得分:1)
有关已完成的示例,请参阅this answer。它通过对模数因子进行模运算,并将结果组合起来,准确地显示了如何以模块化方式模拟复合模型。
答案 1 :(得分:0)
要找到所有与N互质的数字,只需在[1,N]上迭代euclid GCD()算法。如果GCD(a,N)== 1则a,N是互质的