编写一个找到完美数字的程序 - 错误
Writing a program that finds perfect numbers - error
我正在开发一个寻找完美数字的程序(即 6,因为它的因数 1、2 和 3 加起来等于自身)。我的密码是
k=2
mprim = []
mprimk = []
pnum = []
def isprime(n):
"""Returns True if n is prime."""
if n == 2:
return True
if n == 3:
return True
if n % 2 == 0:
return False
if n % 3 == 0:
return False
i = 5
w = 2
while i * i <= n:
if n % i == 0:
return False
i += w
w = 6 - w
return True
def mprime(k):
while k < 50:
check = (2**k)-1
if isprime(check) == True:
mprim.append(check)
mprimk.append(k)
print check
k+=1
else:
k+=1
mprime(k)
def isperf(lst):
for i in lst:
prm = (((2**i)-1)(2**i))/(2)
pnum.append(prm)
isperf(mprimk)
print pnum
检查数字是否为素数并生成 mercenne 素数 的第一部分工作正常。这是我遇到麻烦的第二部分。我读到如果 2^k - 1
是质数,那么 ((2^k - 1)(2^k))/2
是 完美数 ,所以我正在使用该公式。
它给出的错误是
Traceback (most recent call last):
File "python", line 47, in <module>
File "python", line 44, in isperf
TypeError: 'int' object is not callable
第 47 行是 isperf(mprimk)
,第 44 行是 prm = (((2**i)-1)(2**i))/(2)
。任何援助将不胜感激。
谢谢!
该错误清楚地表明您正在尝试调用不可调用的 int 类型。
在实践中,这意味着您尝试做类似 123()
的事情
负责它的代码是 ((2**i)-1)(2**i)
因为你忘记了 *
它应该是 (((2**i)-1)*(2**i))/(2)
我正在开发一个寻找完美数字的程序(即 6,因为它的因数 1、2 和 3 加起来等于自身)。我的密码是
k=2
mprim = []
mprimk = []
pnum = []
def isprime(n):
"""Returns True if n is prime."""
if n == 2:
return True
if n == 3:
return True
if n % 2 == 0:
return False
if n % 3 == 0:
return False
i = 5
w = 2
while i * i <= n:
if n % i == 0:
return False
i += w
w = 6 - w
return True
def mprime(k):
while k < 50:
check = (2**k)-1
if isprime(check) == True:
mprim.append(check)
mprimk.append(k)
print check
k+=1
else:
k+=1
mprime(k)
def isperf(lst):
for i in lst:
prm = (((2**i)-1)(2**i))/(2)
pnum.append(prm)
isperf(mprimk)
print pnum
检查数字是否为素数并生成 mercenne 素数 的第一部分工作正常。这是我遇到麻烦的第二部分。我读到如果 2^k - 1
是质数,那么 ((2^k - 1)(2^k))/2
是 完美数 ,所以我正在使用该公式。
它给出的错误是
Traceback (most recent call last):
File "python", line 47, in <module>
File "python", line 44, in isperf
TypeError: 'int' object is not callable
第 47 行是 isperf(mprimk)
,第 44 行是 prm = (((2**i)-1)(2**i))/(2)
。任何援助将不胜感激。
谢谢!
该错误清楚地表明您正在尝试调用不可调用的 int 类型。
在实践中,这意味着您尝试做类似 123()
负责它的代码是 ((2**i)-1)(2**i)
因为你忘记了 *
它应该是 (((2**i)-1)*(2**i))/(2)