提高指数问题的性能(速度)

时间:2018-01-23 13:56:48

标签: python

我目前在repl.it上学习Python,我的一项工作有问题。

我的代码应该是:

1. 输入给定的整数X

2. 找出最大整数n,其中2ⁿ小于或等于X.

3. 打印指数值(n)和表达式2的结果。

但我的代码失败了,因为机器插入了太大的数字,如10 ^ 8 + 2。该计划完全失败

以下是我正在处理的代码:

X = int(input())
a = X//2
while a > -1:
  if (2**a) < =x:
    print(a)
    print(2**a)
    break
  else:
    a -= 1

任何人都可以找到我这个问题的另一个解决方案,或者改进我运行时工作的代码吗?它适用于少量(小于10 ^ 6),但程序冻结。

提前致谢!

3 个答案:

答案 0 :(得分:0)

当然,我不能提到你提到的“太大的输入”(因为你没有提供),但至于问题本身,它可以通过以下方式更容易解决:

import numpy as np
a = int(np.log2(your_input))

答案 1 :(得分:0)

我看到的第一个问题是你的代码

if (2**a) < =x:
    print(a)
    print(2**a)

您计算2**a两次的值。一个好的开始可能是将2**a的值保存到变量中。但是,由于您只使用2的幂,您还可以查看按位运算。因此,您可以编写

而不是a = X//2
a= X >> 2

而不是写2**a

temp = 1 << a

使用2的幂时,使用按位运算可以明显更快。

答案 2 :(得分:0)

我做到了! (当然使用你的一些解决方案) 这是我的老师代码:

<form id="chardiv" action="comments.php" method="post">
Name:<br>
<input type="text" name="mod_name" required><br>

Message:<br>

<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea' name="topic" required></textarea>
<input type="submit" value="Submit"><br>
</form>