Я работаю над программой, которая находит идеальные числа (т. Е. 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
Первая часть, которая проверяет, является ли число простым, и производит Мерсенну воспламеняет, работает нормально. С его второй частью у меня проблемы. Я прочитал, что если 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)
. Любая помощь будет оценена.
Спасибо!
Так что с круглыми скобками вокруг '2' в вашем знаменателю ? – Makoto
Конкатенация не является умножением в Python. Вам нужно фактически выписать знаки '*'. – user2357112
'prm = (((2 ** i) -1) * (2 ** i))/(2)' дает правильный результат. –