【问题标题】:2 raised to what power, is greater than 1,000,000,000? print the answer(answer must be int)2 提高到什么幂,大于10亿?打印答案(答案必须是整数)
【发布时间】:2022-06-15 18:14:49
【问题描述】:

我正在尝试使用while 循环找到这个答案,但我无法编写代码。

我正在尝试以下代码:

base=2
num=1

while base**num > 1000000000:
   print(num)
   num +=1

【问题讨论】:

  • 如果你想迭代到1M,你应该反向比较。不过,这非常慢。你问的是log2 操作。使用log2寻找力量
  • 你想要while base**num<1000000000。目前base^num(即2^1)小于1M,所以不执行while循环,不打印任何内容
  • 这看起来像家庭作业。但是没关系。我只是想指出没有必要求幂。你可以继续加倍base,直到超过 1000000000。你加倍的次数就是答案。我指出这一点是因为它的效率略高。
  • 29.8973528544
  • @MartinPacker 差异(如果有的话)可以忽略不计。加倍是取幂。如果您使用位移来加倍,您只会获得巨大的改进,因为这是所有 CPU 中的单周期操作。

标签: python


【解决方案1】:

这是一个使用日志的解决方案。

    import math
    res = math.log(1000000000,2)
    num = int(res)+1 # taking ceiling and not floor of the log as 2^floor will result in a number less than 1000000000
    print(num)

使用 while 循环效率低下且计算成本很高,尤其是对于大数字

【讨论】:

    【解决方案2】:

    我不知道我是否正确理解了你的问题,但如果是的话......

    您正在尝试查找一个用于提升 2 的数字,该数字为您提供大于 1'000'000'000 的数字。 条件错误,因为它应该是:

    while (base**num < 1000000000):
       num += 1
    
    print(num)
    

    因此,它会增加 num,但不会大于您的“限制”1'000'000'000

    我建议你使用对数函数,避免循环:

    import math
    
    num = (int) math.log(1000000000, 2)
    print(num)
    

    【讨论】:

      【解决方案3】:

      你的情况正好相反。应该是base**num&gt;1000000000。不过,这是一种极其低效的幂计算方式。

      使用:

      >>> math.ceil(math.log2(1000000000))
      30
      

      math.log2log 的专用版本。您甚至可以使用int.bit_length,因为在二进制中,数字使用与其基数一样多的数字表示。除非数字是 2 的精确幂,否则 2^digits 保证返回更大的数字

      >>> int.bit_length(1000000000)
      30
      

      你需要提高一个“底数”(在本例中为 2)来获得一个数字的幂是该数字的以 N 为底的对数。在这种情况下,您正在寻找 1000000000 的以 2 为底的对数。

      虽然是math.log2(1000000000) 的结果是29.897,所以你需要它的上限来获得下一个更高的整数

      >>> math.log2(1000000000)
      29.897352853986263
      

      对数非常有用,CPU 有内置命令来处理它们。

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        base = 2
        power = 1
        value = 1000000000
        output = base**power
        while output <= value:
            power+=1
            output = base**power
            print(output, power)`enter code here`
            
        print(power)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-02
          • 2022-06-16
          相关资源
          最近更新 更多