偶数斐波那契数和
Even Fibonacci numbers Sum
即使是斐波那契数列总和也不超过四百万。我在 APL 中使用多行函数,但没有得到输出:
result←Euler2 a;b;c;sum;i;limit
b←0
c←1
sum←0
i←0
limit←4000000
:For i :In limit
a←b
b←c
c←a+b
:If (0=2|c)
sum←(sum+c)
:EndIf
:EndFor
result←sum
:For
构造在 :In
关键字之后采用值列表。你只是给了它限制。也许您的意思是 ⍳limit
赋予它从 1 到四百万的所有值?
警告:以下意见。
我会避免使用手动循环和 tradfns。最终的解决方案将(通常)笨拙且缓慢。 APL处理数组的能力很强,能用就用吧
这里有一个不同的可能解决方案,使用 'dfns'。
+/{⍵/⍨0=2|⍵}1↓{⍵,⍨+/2↑⍵}⍣{4000000<⊃⍺} 1 1
⍝ explanation:
{⍵,⍨+/2↑⍵} +/2↑⍵ the sum of the first two items in ⍵
⍵,⍨ prepend to ⍵
{⍵,⍨+/2↑⍵} 1 1 is 2 1 1
{⍵,⍨+/2↑⍵} 2 1 1 is 3 2 1 1
⍣ do this (see https://help.dyalog.com/18.0/Content/Language/Symbols/DieresisStar.htm)
{4000000<⊃⍺} 1 1 until the previous element (⊃⍺) is greater than 4 million, starting with the vector 1 1
'result:', {⍵,⍨+/2↑⍵}⍣{⎕←⍺⋄100<⊃⍺} 1 1
2 1 1
3 2 1 1
5 3 2 1 1
8 5 3 2 1 1
13 8 5 3 2 1 1
21 13 8 5 3 2 1 1
34 21 13 8 5 3 2 1 1
55 34 21 13 8 5 3 2 1 1
89 55 34 21 13 8 5 3 2 1 1
144 89 55 34 21 13 8 5 3 2 1 1
result: 144 89 55 34 21 13 8 5 3 2 1 1
1↓... remove the first element, as it is greater than 4 million
+/{⍵/⍨0=2|⍵} sum of the even numbers
即使是斐波那契数列总和也不超过四百万。我在 APL 中使用多行函数,但没有得到输出:
result←Euler2 a;b;c;sum;i;limit
b←0
c←1
sum←0
i←0
limit←4000000
:For i :In limit
a←b
b←c
c←a+b
:If (0=2|c)
sum←(sum+c)
:EndIf
:EndFor
result←sum
:For
构造在 :In
关键字之后采用值列表。你只是给了它限制。也许您的意思是 ⍳limit
赋予它从 1 到四百万的所有值?
警告:以下意见。
我会避免使用手动循环和 tradfns。最终的解决方案将(通常)笨拙且缓慢。 APL处理数组的能力很强,能用就用吧
这里有一个不同的可能解决方案,使用 'dfns'。
+/{⍵/⍨0=2|⍵}1↓{⍵,⍨+/2↑⍵}⍣{4000000<⊃⍺} 1 1
⍝ explanation:
{⍵,⍨+/2↑⍵} +/2↑⍵ the sum of the first two items in ⍵
⍵,⍨ prepend to ⍵
{⍵,⍨+/2↑⍵} 1 1 is 2 1 1
{⍵,⍨+/2↑⍵} 2 1 1 is 3 2 1 1
⍣ do this (see https://help.dyalog.com/18.0/Content/Language/Symbols/DieresisStar.htm)
{4000000<⊃⍺} 1 1 until the previous element (⊃⍺) is greater than 4 million, starting with the vector 1 1
'result:', {⍵,⍨+/2↑⍵}⍣{⎕←⍺⋄100<⊃⍺} 1 1
2 1 1
3 2 1 1
5 3 2 1 1
8 5 3 2 1 1
13 8 5 3 2 1 1
21 13 8 5 3 2 1 1
34 21 13 8 5 3 2 1 1
55 34 21 13 8 5 3 2 1 1
89 55 34 21 13 8 5 3 2 1 1
144 89 55 34 21 13 8 5 3 2 1 1
result: 144 89 55 34 21 13 8 5 3 2 1 1
1↓... remove the first element, as it is greater than 4 million
+/{⍵/⍨0=2|⍵} sum of the even numbers