【问题标题】:More efficient method for this calculation?更有效的计算方法?
【发布时间】:2009-11-17 09:51:13
【问题描述】:
a = 218500000000

s = 6
f = 2
k = 49
d = k + f + s

r = a
i = 0

while (r >= d):
  r = r - d
  #print ('r = ',r)
  i = i+1
  #print ('i = ',i)

print (i)

我认为它符合我的预期,但是计算这么大的数字太慢了,我等了 5 分钟才打印出来(而 python 使用 100% cpu 来计算..),但它没有吨。是否有更有效的方法来重写这段代码,以便我可以看到需要多少次迭代 (i) 才能完成?

非常感谢

【问题讨论】:

  • 你真正想要它做什么?你在计算什么?
  • @S.Lott:我希望 SO 在我上学甚至大学的时候就存在。 :)
  • @nimbuz:如果这不是家庭作业,请提供一些背景信息,说明为什么你做的事情效率如此低下。你从哪里得到这个算法的?你为什么用它?只有家庭作业才能证明做一件简单的事情如此糟糕。

标签: python iteration long-integer largenumber


【解决方案1】:
r = (a % d)
i = (a / d)

使用modulo and division operators

还有一个 divmod 函数可以一起计算:

i, r = divmod(a,d)

【讨论】:

    【解决方案2】:

    您可以使用i = a/d。 :D

    【讨论】:

    • 哦,除法比加法/减法快吗?我很想知道为什么! :)
    • 得到了答案顺便说一句,3833333333.33。不过,想知道为什么除法更快?
    • @:Nimbuz,这取决于,2、4、8 等二次幂数的除法与加法和减法一样快。即使数字不是二次幂,这样做除法仍然比这么多加法/减法更快。同样使用现代硬件,除法与加法/减法的时钟周期相同。
    • @Nimbuz,如果你必须将1000*234 相乘,你会将234 相加一千次还是应用乘法算法?
    • @:Numbuz,就您而言,您所做的不仅仅是一些加法/减法。在每个循环中,对i 进行一次加法,对r 进行一次减法,以及rd 的条件。而且您正在这样做一百万次:p。
    【解决方案3】:

    你要找的不是部门吗?

    【讨论】:

      【解决方案4】:

      试试3833333333.3333333333333333333333。又名r / d

      【讨论】:

        【解决方案5】:

        看起来你正在对我进行截断除法。也就是说,您想在不知道余数的情况下找出 d 进入 a 的次数。

        a = 218500000000
        s = 6
        f = 2
        k = 49
        d = k + f + s
        
        i = a // d
        
        print (i)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-20
          • 2023-03-18
          • 1970-01-01
          相关资源
          最近更新 更多