2016-09-15 41 views
1

Я работаю над программой, которая находит идеальные числа (т. Е. 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). Любая помощь будет оценена.

Спасибо!

+1

Так что с круглыми скобками вокруг '2' в вашем знаменателю ? – Makoto

+3

Конкатенация не является умножением в Python. Вам нужно фактически выписать знаки '*'. – user2357112

+0

'prm = (((2 ** i) -1) * (2 ** i))/(2)' дает правильный результат. –

ответ

1

Ошибка ясно указывает, что вы пытаетесь вызвать тип int, который не может быть вызван.

На практике это означает, что вы пытаетесь сделать что-то вроде 123()

И кода, отвечающего за это является ((2**i)-1)(2**i) потому что вы забыли * и это должно быть (((2**i)-1)*(2**i))/(2)