Ich arbeite an einem Programm, das perfekte Zahlen (d. H. 6, weil seine Faktoren, 1, 2 und 3 summieren sich zu sich selbst). Mein Code istSchreiben eines Programms, das perfekte Zahlen findet - Fehler
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
Der erste Teil, die, wenn überprüft eine Zahl prim ist, und produziert mercenne Primzahlen ist in Ordnung arbeiten. Es ist der zweite Teil, mit dem ich Probleme habe. Ich habe gelesen, dass, wenn 2^k - 1
ist prime, dann ((2^k - 1)(2^k))/2
ist eine perfekte Zahl, also verwende ich diese Formel.
Der Fehler es gibt, ist
Traceback (most recent call last):
File "python", line 47, in <module>
File "python", line 44, in isperf
TypeError: 'int' object is not callable
47 Linie isperf(mprimk)
ist und die Leitung 44 ist prm = (((2**i)-1)(2**i))/(2)
. Jede Hilfe wäre willkommen.
Danke!
Also, was um mit dem Pars ist '2' im Nenner ? – Makoto
Verkettung ist keine Multiplikation in Python. Sie müssen tatsächlich die '*' Zeichen ausschreiben. – user2357112
'prm = (((2 ** i) -1) * (2 ** i))/(2)' gibt die korrekte Ausgabe. –