「プログラミング応用編」では、プログラミングコンテストの問題などをFreeMatでプログラム作成していく。今回は「オイラープロジェクト」の問題を解こう。
前回は、「MATLABにはなく、FreeMatにはない」関数を作ってみました。今回は、「オイラープロジェクト」の問題を例に、FreeMatのプログラミングについて学習していきます。
筆者注:FreeMatはコマンド入力後にエンターキーを押すとコマンドを実行します。本連載ではエンターキーの記述を省略しますが、操作の際にはコマンド入力後にエンターキーが必要です。
オイラープロジェクトとは、与えられた数学の問題をコンピュータとの2人3脚で解く、要は数学問題集です。答えが合っているかどうかを問うので、プログラミング言語は何でも問題ありません。極端な話、別にコンピュータを使わなくても、紙と鉛筆で答えを求めてもよいのです。
オイラープロジェクトのWebサイトに登録後、問題を選んで解答欄に入力して正解すると“正解者”として登録されます。Webサイトの右上「Problems」をクリックすれば、登録しなくても問題が見られます。問題は英文ですが、日本語で解説したサイトもあります。
簡単な問題から想像を絶するほど難しい問題までさまざまですが、今回はこのうち簡単な問題をFreeMatで解いていきます。
1.Problem 1 Multiples of 3 and 5
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.
意味は、「10未満の自然数のうち、3または5の倍数となっているのは、3,5,6,9であり、これらの合計は23である。1000未満の3または5の倍数の合計を求めなさい」。
1000未満の自然数なので、1〜999の整数のなかで、3の倍数の和と5の倍数の和を求めます。このうち、15の倍数は重複するので、15の倍数の和を引きます。
FreeMatでは、以下のように3:3:999で3から999までの3の倍数を生成し、sum()で和を求めています。
--> sum(3:3:999)+sum(5:5:999)-sum(15:15:999) ans = 233168
これは“サービス問題”ですね。なお、問題の構成として、例を示してから問題を出すようになっています。プログラムを作成したら、例で試してみることをお勧めします。
2.Problem 2 Even Fibonacci numbers
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.
意味は、「フィボナッチ数列は前2項の和を求めていくことで得られます。1と2から始めると10項目までは、1, 2, 3, 5, 8, 13, 21, 34, 55, 89となります。フィボナッチ数が400万未満のフィボナッチ数列の偶数の項の和を求めなさい」。
例では100未満のフィボナッチ数列となり、偶数の項の和は、2+5+13+34+89=143となります。ex325.mにFreeMatでのプログラムを示します。n未満のフィボナッチ数列は、while(a(k-1)<n)として、a(k)=a(k-2)+a(k-1)で生成します。偶数の項の和なので、sum(a(2:2:k-1))とします。
function p2=ex325(n) a(1)=1;a(2)=2; k=3; while(a(k-1)<n) a(k)=a(k-2)+a(k-1); k=k+1; end p2=sum(a(2:2:k-1));
例で確認してみると、下記のように正しく求められていることが分かります。
--> ex325(100) ans = 143
本番の問題を解いてみると、下記のようになります。
--> ex325(4e6) ans = 5702886
Copyright © ITmedia, Inc. All Rights Reserved.