写一个求完美数的程序

2024-10-01 02:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个程序,它可以找到完美的数字(例如,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素数,工作正常。这是我遇到麻烦的第二部分。我读过,如果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)。任何协助都将不胜感激。你知道吗

谢谢!你知道吗


Tags: infalsetruereturnifdefcheck素数
1条回答
网友
1楼 · 发布于 2024-10-01 02:22:17

这个错误清楚地表明您正试图调用一个int类型,而该类型是不可调用的。你知道吗

实际上,这意味着你试图做一些类似123()

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

相关问题 更多 >