这个函数的目的是计算Carmichael函数--我试图在函数的顶部添加n=int(n(,并在条件句中直接将n转换为int,但我仍然遇到了类似的错误。我不明白为什么程序不将n解释为整数
def carmichael(n: int) -> int:
k = 2
a = 1
alist = []
while not ((gcd(a, n)) == 1):
a = a + 1
while ((gcd(a, n)) == 1) & (a <= n) :
alist.append(a)
a = a + 1
while not ((gcd(a, n)) == 1):
a = a + 1
timer = len(alist)
while timer >= 0:
for a in alist:
if (a**k) % n == 1:
timer = timer - 1
if timer < 0:
break
pass
else:
timer = len(alist)
k = k + 1
return k
其中n定义为的行
n = (p * q).bit_length
函数被称为的行
lambdaN = carmichael(n)
错误消息
TypeError: '<=' not supported between instances of 'int' and 'builtin_function_or_method'
问题是您正在传递一个函数,而不是一个整数作为n
参数。
n = (p * q).bit_length
您忘记了bit_length
函数后面的括号()
。如果没有括号,你就不是调用函数,你只是引用它。