我在curzon号码的代码中找不到的错误是什么?

2024-09-25 18:08:12 发布

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

以下是给定问题的描述:

如果提升到num的1加2正好可以被1加2除以num,则num是Curzon数。 给定一个非负整数num,实现一个函数,如果num是Curzon数,则返回True,否则返回False

我写的代码是:

def is_curzon(num):
    curr = 0
    mult_add = 2 * num + 1
    while curr <= num:
        if (2**curr + 1) % mult_add == 0:
            return True
        curr += 1
    return False

is_curzon(120)答案应该是False时,它没有通过测试,但我得到了True

显而易见的答案如下,它给出了is_curzon(120)的正确答案:

def is_curzon(num):
    return not (2**num + 1) % (2*num + 1)

但是我想减少程序运行来解决这个问题的时间。如果num是一个非常大的数字,我不想压倒这个程序

你能帮我解决这个问题吗


Tags: 函数答案代码addfalsetruereturnis
1条回答
网友
1楼 · 发布于 2024-09-25 18:08:12
   return not (2**num + 1) % (2*num + 1) 

是一条语句,它比循环花费的时间少,必须反复运行:

while curr <= num:
    curr+=1

必须重复“num”+1次,因为当“curr”大于num时,条件变为false。 (这是一个缩短的版本,在代码中if (2**curr + 1) % mult_add == 0首先被选中,如果是这样,则返回True,否则将curr增加+=1)

如果您仍然希望在代码中找到问题,请首先尝试通过跟踪正在发生的事情来解决问题,您可以自己跟踪它,或者尝试运行代码:http://pythontutor.com/visualize.html#mode=display并查看发生了什么

相关问题 更多 >