我正试图找到一种有效的方法来计算Euler's totient function。
这个密码怎么了?好像没用。
def isPrime(a):
return not ( a < 2 or any(a % i == 0 for i in range(2, int(a ** 0.5) + 1)))
def phi(n):
y = 1
for i in range(2,n+1):
if isPrime(i) is True and n % i == 0 is True:
y = y * (1 - 1/i)
else:
continue
return int(y)
我正在用python开发一个密码库,这就是我正在使用的。
gcd()
是欧几里德计算最大公约数的方法,而phi()
是总函数。你有三个不同的问题。。。
y
需要等于n
作为初始值,而不是1
n % i == 0 is True
没有做你认为的事情,因为Python链接了比较!即使n % i
等于0
,那么0 == 0
是True
但是0 is True
是False
!使用parens或者去掉与True
的比较,因为这是不必要的。解决这些问题
根据维基百科上的描述,这里有一种更快的工作方式:
我不是说这是最快或最干净的,但它是有效的。
相关问题 更多 >
编程相关推荐