以下是给定问题的描述:
如果提升到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
是一个非常大的数字,我不想压倒这个程序
你能帮我解决这个问题吗
是一条语句,它比循环花费的时间少,必须反复运行:
必须重复“num”+1次,因为当“curr”大于num时,条件变为false。 (这是一个缩短的版本,在代码中
if (2**curr + 1) % mult_add == 0
首先被选中,如果是这样,则返回True,否则将curr增加+=1)如果您仍然希望在代码中找到问题,请首先尝试通过跟踪正在发生的事情来解决问题,您可以自己跟踪它,或者尝试运行代码:http://pythontutor.com/visualize.html#mode=display并查看发生了什么
相关问题 更多 >
编程相关推荐