2016-09-15 3 views
1

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!

+1

Also, was um mit dem Pars ist '2' im Nenner ? – Makoto

+3

Verkettung ist keine Multiplikation in Python. Sie müssen tatsächlich die '*' Zeichen ausschreiben. – user2357112

+0

'prm = (((2 ** i) -1) * (2 ** i))/(2)' gibt die korrekte Ausgabe. –

Antwort

1

Der Fehler besagt eindeutig, dass Sie versuchen, einen Int-Typ aufzurufen, der nicht aufrufbar ist.

denn es ist in der Praxis bedeutet, dass Sie versuchen, verantwortlich etwas wie 123()

Und Code zu tun ((2**i)-1)(2**i) weil Sie * vergessen und es sollte (((2**i)-1)*(2**i))/(2)

Verwandte Themen