プロジェクトEuler 002
3045 ワード
こんにちは、dev
プロジェクトEulerは、私が始めるのが好きである挑戦的な数学/コンピュータプログラミング問題のシリーズです.私は確かに私のために学ぶためにたくさんあるだろうし、私はここで私のソリューションをここで共有したいと思います.
❓ 問題は002です
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
💡 この問題を解決するために,モジュロ演算と加算の組合せを用いることができる.
❗ Fibonacciシーケンスやプログラミングにおける他の同様の概念を使用するときに考える最初の解決策は確かです.
再帰的アプローチしかし、我々は常にこれらの機能を千回と呼ばれることがあります、これは単に意味を覚えておく必要があります
あなたはそれらのいずれかに直面する
Maximum call stack size exceeded
エラーのように!これは💀 これらのアルゴリズムの空間的複雑さHave a 👀 at this article on this topic ), そこで、ここでは代わりに反復的なアプローチを使用します.
これはfibonacciシーケンスの式です.
fib(n) = fib(n-1) + fib(n-2) → for n > 1
fib(n) = 1 → for n = 0, 1
これらの変数があると仮定できます.MAX = 4000000
first_number = 1
second_number = 1
sum = 0
その後、我々は2つの異なる変数に格納する前の用語で、すべての次の用語を計算することによって答えを計算する!その後、偶数をフィルタリングし、それらをすべて合計.
💻 それでPythonでの解決策は以下の通りです.
while second_number <= MAX:
temp = second_number
second_number += first_number
first_number = temp
if second_number % 2 == 0:
sum += second_number
print(sum)
これはこの問題に対する最良の答えではないかもしれませんが、この問題に対して32個の数字(奇数も含まれています)を計算します.どちらが再帰的アプローチよりもはるかに良いです.明らかにすべての奇数を計算しない方法を見つけることができる場合!あれ
あなたがこれについてのアイデアを持っているかどうかを確認するのを待つことができない完璧な改善されます.
✅ この問題への答えは
4613732
.ありがとう❤️
私は、誰かにプログラミングや誰か好奇心旺盛な世界に役立つことを願っています🧐!
あなたがあなたに役に立つ内容を見つけるならば、あなたの考えをコメントしてください、私はあなたからすべてを学びたいです.
あなたの愛情のある方向に感謝します.
Reference
この問題について(プロジェクトEuler 002), 我々は、より多くの情報をここで見つけました https://dev.to/farhaduneci/project-euler-002-4356テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol