编写一个找到完美数字的程序 - 错误

时间:2016-09-15 17:58:37

标签: python math compiler-errors listiterator

我正在开发一个找到完美数字的程序(即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 primes ,工作正常。它的第二部分我遇到了麻烦。我已经读过,如果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 个答案:

答案 0 :(得分:1)

错误清楚地表明您正在尝试调用不可调用的int类型。

在实践中,这意味着您尝试执行123()

之类的操作

负责该代码的代码为((2**i)-1)(2**i),因为您忘记了*,而且应该是(((2**i)-1)*(2**i))/(2)