Python 一种计算大输入欧拉函数的有效方法
根据维基百科关于的描述,我编写了以下代码:Python 一种计算大输入欧拉函数的有效方法,python,python-3.x,cryptography,Python,Python 3.x,Cryptography,根据维基百科关于的描述,我编写了以下代码: from math import gcd def phi(n): amount = 0 for k in range(1, n + 1): if gcd(n, k) == 1: amount += 1 return amount 它适用于小数字,但我想计算一些数字的toticent函数,例如 n=5692297035794675412610596123456169 有没有更好的方法来计
from math import gcd
def phi(n):
amount = 0
for k in range(1, n + 1):
if gcd(n, k) == 1:
amount += 1
return amount
它适用于小数字,但我想计算一些数字的toticent函数,例如
n=5692297035794675412610596123456169
有没有更好的方法来计算诸如大输入之类的Totoent函数?由于这也是标记加密,这将进一步提高可能算法的有效性 如果知道
n
的素因子,有一种方法可以非常快速地计算Euler toticentφ。设pi为独立的k
素数n
的因子,然后
φ(n)=(p1-1)*(p2-1)*……*(pk-1)
对于素数幂也有一个公式。这在这里是不必要的,因为RSA加密/签名或Paillier加密或Rabin签名使用两个不同的素数p
和q
如我们所见,有效地找到φ(n)需要因子分解的知识。证明了对于RSA,φ(n)的知识等于n
的因式分解。很快在这里看到
因此,如果您不知道因式分解,对于大的
n
来说,没有有效的算法来寻找欧拉常数。您需要使用一些数学知识。暴力是不够的。如果这是RSA,你的大数是N=p*q,其中p和q是素数,那么有一个非常简单的方法来计算totitent(N)。一点研究会对你有帮助的。大吗?多大<代码>因子(5692297035794675412610596123456169)和φ=(47-1)*(2819-1)*(65713-1)*(891551-1)*(57247819-1)*(12809677289-1)
这是否回答了你的问题?