麻木的第一个手指

2024-10-01 15:39:25 发布

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

我想要一个无限循环的fibonocci级数的前9位和后9位。单独运行测试,我得到更好的结果,最后9位数字使用模运算符no,与前9位数字相比。我运行了不同的测试,如int(str(b)[::-1])%10**9, b/(10**(len(str(b))-9)),但结果仍然相同。我认为这是因为数字到字符串转换的更高的数字。有没有其他方法可以不把前9位数字转换成字符串,或者有/没有字符串的有效方法?在

def fibby():
    a,b = 1,1
    yield [a,a]
    yield [b,b]
    while True:
        a,b = b,a+b
        yield [str(b)[:9], b%10**9]

Tags: 方法no字符串truelendef运算符数字
1条回答
网友
1楼 · 发布于 2024-10-01 15:39:25

这里有几个版本和时间来获取前30000个前缀。为了简单起见,我省略了前两个收益率和最后一个数字。在

  • fibby1是最初使用str(b)[:9]的方式。在
  • fibby2跟踪10除以的适当幂。在
  • fibby3将前9位数字保留在ab中,其余数字保留在{}和B中。与fibby2相比,这避免了大的b除以10的大幂。大数只是加/减/比较,或与一个小数字相乘。在
  • fibby4使用@therefromhere建议的math.log10。在
  • fibby5使用^{}模块。在

输出:

All agree? True
fibby1: 24.835 seconds
fibby2:  0.289 seconds
fibby3:  0.201 seconds
fibby4:  2.802 seconds
fibby5:  0.216 seconds

为了进行比较,我还尝试了str(b % 10**9),即最后9位数字,这花了0.506秒。这比我对前九位数的快速解要慢。在

代码:

^{pr2}$

相关问题 更多 >

    热门问题