- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 Project Euler Problem 2 的 Haskell 解决方案这适用于四百万的限制,以及高达 10^100000 的限制,在我的机器上只需要几秒钟。
但对于更大的东西,例如10^1000000,计算不会及时返回,如果有的话(已尝试将其保留几分钟)。这里的限制因素是什么?
evenFibonacciSum :: Integer -> Integer
evenFibonacciSum limit =
foldl' (\t (_,b) -> t + b) 0 . takeWhile ((<=limit) . snd) . iterate doIteration $ (1,2) where
doIteration (a, b) = (twoAB - a, twoAB + b) where
twoAB = 2*(a + b)
最佳答案
问题是您要对(偶数)斐波那契数求和。这意味着你必须计算所有这些。但是
F(n) ≈ φ^n / √5, with φ = (1 + √5)/2
所以你添加了很多大尺寸的数字,Θ(n)
F(n)
的位.对于 10^1000000
的限制,你需要大约 800000×2 个大于 10^500000
的数字相加.一般来说,你需要 Θ(n)
用 Θ(n)
添加数字位。
添加 d
的数字[以任何基数] 的数字是 O(d)
手术。所以你的算法是指数的二次方。
为避免这种情况,找到总和的闭合公式 S(k)
第一个 k
甚至斐波那契数(提示:这是一个相对简单的公式,涉及一个斐波那契数),找到最大的 k
这样F(3*k) <= limit
,并使用计算公式和算法计算总和 F(n)
在 O(log n)
步骤例如here .
关于haskell - 欧拉计划 #2 大极限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13923675/
如何限制 Realm 返回的对象数量? .findAll 返回匹配查询的所有行,而 .findFirst 只返回第一行。但是像前 1000 这样的东西呢? .findAll 可能会返回太多的行,以至于
SELECT * FROM table WHERE city LIKE example ORDER by RAND() Limit 10 我正在尝试从表中返回一些随机条目,但它在相当多的页面上被点击
我是一名优秀的程序员,十分优秀!