给定一个极限,找到低于给定极限的斐波那契数列中所有偶数项的总和。
Fibonacci数的前几个术语是,1,1,2,3,5,8,13,21,34,55,89,144,233,…(偶数号突出显示)。
例子 :
Input : limit = 8
Output : 10
Explanation : 2 + 8 = 10
Input : limit = 400;
Output : 188.
Explanation : 2 + 8 + 34 + 144 = 188.
一个简单的解决方案是遍历所有素数,而下一个数小于或等于给定的限制。对于每个数字,请检查其是否为偶数。如果数字是偶数,则将其添加到结果中。
一个有效的解决方案基于偶数斐波纳契数的以下递归公式
Recurrence for Even Fibonacci sequence is:
EFn = 4EFn-1 + EFn-2
with seed values
EF0 = 0 and EF1 = 2.
EFn represents n'th term in Even Fibonacci sequence.
请参考上面公式的更多详细信息。
因此,在遍历斐波纳契数时,我们甚至只生成斐波那契数。
C++
// Find the sum of all the even-valued terms in
// the Fibonacci sequence which do not exceed
// given limit.
#include
using namespace std;
// Returns sum of even Fibonacci numbers which are
// less than or equal to given limit.
int evenFibSum(int limit)
{
if (limit < 2)
return 0;
// Initialize first two even prime numbers
// and their sum
long long int ef1 = 0, ef2 = 2;
long long int sum = ef1 + ef2;
// calculating sum of even Fibonacci value
while (ef2 <= limit)
{
// get next even value of Fibonacci sequence
long long int ef3 = 4*ef2 + ef1;
// If we go beyond limit, we break loop
if (ef3 > limit)
break;
// Move to next even number and update sum
ef1 = ef2;
ef2 = ef3;
sum += ef2;
}
return sum;
}
// Driver code
int main()
{
int limit = 400;
cout << evenFibSum(limit);
return 0;
}
Java
// Find the sum of all the even-valued terms in
// the Fibonacci sequence which do not exceed
// given limit.
import java.io.*;
class GFG
{
// Returns sum of even Fibonacci numbers which are
// less than or equal to given limit.
static int evenFibSum(int limit)
{
if (limit < 2)
return 0;
// Initialize first two even prime numbers
// and their sum
long ef1 = 0, ef2 = 2;
long sum = ef1 + ef2;
// calculating sum of even Fibonacci value
while (ef2 <= limit)
{
// get next even value of Fibonacci sequence
long ef3 = 4 * ef2 + ef1;
// If we go beyond limit, we break loop
if (ef3 > limit)
break;
// Move to next even number and update sum
ef1 = ef2;
ef2 = ef3;
sum += ef2;
}
return(int) sum;
}
// Driver code
public static void main (String[] args)
{
int limit = 400;
System.out.println(evenFibSum(limit));
}
}
// This code is contributed by vt_m.
Python3
# Find the sum of all the even-valued
# terms in the Fibonacci sequence which
# do not exceed given limit.
# Returns sum of even Fibonacci numbers which
# are less than or equal to given limit.
def evenFibSum(limit) :
if (limit < 2) :
return 0
# Initialize first two even prime numbers
# and their sum
ef1 = 0
ef2 = 2
sm= ef1 + ef2
# calculating sum of even Fibonacci value
while (ef2 <= limit) :
# get next even value of Fibonacci
# sequence
ef3 = 4 * ef2 + ef1
# If we go beyond limit, we break loop
if (ef3 > limit) :
break
# Move to next even number and update
# sum
ef1 = ef2
ef2 = ef3
sm = sm + ef2
return sm
# Driver code
limit = 400
print(evenFibSum(limit))
# This code is contributed by Nikita Tiwari.
C#
// C# program to Find the sum of all
// the even-valued terms in the
// Fibonacci sequence which do not
// exceed given limit.given limit.
using System;
class GFG {
// Returns sum of even Fibonacci
// numbers which are less than or
// equal to given limit.
static int evenFibSum(int limit)
{
if (limit < 2)
return 0;
// Initialize first two even
// prime numbers and their sum
long ef1 = 0, ef2 = 2;
long sum = ef1 + ef2;
// calculating sum of even
// Fibonacci value
while (ef2 <= limit)
{
// get next even value of
// Fibonacci sequence
long ef3 = 4 * ef2 + ef1;
// If we go beyond limit,
// we break loop
if (ef3 > limit)
break;
// Move to next even number
// and update sum
ef1 = ef2;
ef2 = ef3;
sum += ef2;
}
return(int) sum;
}
// Driver code
public static void Main ()
{
int limit = 400;
Console.Write(evenFibSum(limit));
}
}
// This code is contributed by Nitin Mittal.
PHP
$limit)
break;
// Move to next even number
// and update sum
$ef1 = $ef2;
$ef2 = $ef3;
$sum += $ef2;
}
return $sum;
}
// Driver code
$limit = 400;
echo(evenFibSum($limit));
// This code is contributed by Ajit.
?>
Javascript
输出 :
188