#practiceLinkDiv { display: none !important; }Je-li daná limita, najděte součet všech sudých členů ve Fibonacciho posloupnosti pod danou limitou.
Prvních několik termínů Fibonacciho čísla jsou 11 2 3 5 8 13 21 34 55 89 144 233 ... (sudá čísla jsou zvýrazněna).
Příklady:
Input : limit = 8 Output : 10 Explanation : 2 + 8 = 10 Input : limit = 400; Output : 188. Explanation : 2 + 8 + 34 + 144 = 188.
Jednoduchým řešením je iterovat přes všechna Fibonacciho čísla, zatímco další číslo je menší nebo rovno danému limitu. U každého čísla zkontrolujte, zda je sudé. Pokud je číslo sudé, přidejte jej k výsledku.
Efektivní řešení je založeno na níže uvedeném rekurzivní vzorec pro sudá Fibonacciho čísla
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.
Odkazovat tento více podrobností výše uvedeného vzorce.
Takže při iteraci přes Fibonacciho čísla generujeme pouze sudá Fibonacciho čísla.
// 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 Fibonacci 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 Fibonacci 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 Fibonacci 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 // Fibonacci 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 // 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. function evenFibSum($limit) { if ($limit < 2) return 0; // Initialize first two even // Fibonacci numbers and their sum $ef1 = 0; $ef2 = 2; $sum = $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; $sum += $ef2; } return $sum; } // Driver code $limit = 400; echo(evenFibSum($limit)); // This code is contributed by Ajit. ?> JavaScript <script> // Javascript program to 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. function evenFibSum(limit) { if (limit < 2) return 0; // Initialize first two even Fibonacci numbers // and their sum let ef1 = 0 ef2 = 2; let sum = ef1 + ef2; // calculating sum of even Fibonacci value while (ef2 <= limit) { // get next even value of Fibonacci sequence let 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; } // Function call let limit = 400; document.write(evenFibSum(limit)); </script>
výstup:
188
Časová náročnost: Na)
Pomocný prostor: O(1)
"zednický vzorec"