【Project Euler #005】割り切れる整数を求めるためにユークリッドの互除法をご利用になります(C++)
この記事もまた過去のブログから引っ張ってきたものなので、、、(以下略、ごめんなさい~)
1 から 20 までの整数全てで割り切れる数字の中で最小の正の数は?
ここから急に整数論っぽくなりました.
ソースコード
解法の指針
今回はユークリッドの互除法というのを使いました.解説はウィキペディアに詳しくのっているのでご参考に。
本当はユークリッドの互除法の解説を書きたかったのですが、大変なので断念しました、、、
【Project Euler #004】intからstringの変換をして回文数の最大値を求める(C++)
【Project Euler #003】long longを使って素因数の最大のものを求める(C++)
Project Eulerの3問目。そしてこの記事もまた過去のブログから引っ張ってきたものなので、設問が変わっていたらごめんなさい。
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
600851475143 の素因数のうち最大のものを求めましょう.
ソースコードはこちら
まぁ、大したコードではないですけども.
考え方
ポイントとしてはlong longを使うということ.数値計算とかでよく使うのはdoubleとかばっかりなので初めてかもしれません.
あとは、600851475143まで真面目にループを繰り返すのか?ということ.ループ回数を極端に減らすためにfactors(素因数)の二乗回でストップしておきました.
【Project Euler #002】フィボナッチ数列をそのまま解く(C++)
Project Eulerの2問目をやっていきます
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.
項の値が4,000,000以下の, 偶数値の項の総和を求めよ
フィボナッチ数列ってなんだっけ?
昔、ミステリー小説によく出ていて、フィボナッチ数列を解くことが犯人への手がかりみたいなのが多かったですが、最近は使い古されたためか廃れてきましたね.
さてさて、フィボナッチ数って何?って話の途中でした.Wikipediaの解説を見たほうが早いかもしれませんが、簡単に言うとこんな数列です.
これの偶数値を足していくわけです.
\[{\begin{cases} ~~~F_0=0\\ ~~~F_1=1\\ ~~~F_{n+1}=F_n+F_{n+1} (n\ge 0)\end{cases} }\]
実際に書いてみる
例によってVisual studioのC++を使います.
基本的な指針としては
- 無限ループを回す
- フィボナッチ数列を計算する
- n項目の値が偶数かを判定する
- 400万を超えたらbreakする
ということです。ただし、毎回フィボナッチ数を呼び出して計算するのも非効率な気がしてきたので、こんなふうに書き換えました。
スマートなコードではない気がしますが、まぁパッと思いつくのはこんなもんかと。
【Project Euler #001】ウィキペディアに反して解答してみる。(C++、Java)
2年位前にProject Eulerというのをやって記事にしました。前のブログの大清掃に伴い消してしまうのは勿体無いので、改定してこっちのブログに記載します。
プロジェクト・オイラーって何?って感じですが、簡単にいえばプログラミング問題集みたいなものです。下のリンクが公式ページですが、こちらのWikiにも詳しく書いています.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。
JAVAだとこんな感じ
ウィキペディアでは、包含排除の定理を使って解くことを推奨していますが、まぁ、このくらいなら普通にループ計算したほうが速いかと。