読者です 読者をやめる 読者になる 読者になる

PEをMathematicaで

Project Eulerに挑戦してみよう

大数の学コンを解いてみた

『大学への数学』2017年5月号の学力コンテスト第6問が非常に Mathematica 向きの問題だったのでやってみました*1

29^1+29^2+29^3+...+29^(2017) を n で割った余りが29になるような自然数 n を小さい順に5個求めよ。

とりあえず答を出す

いかにも Mod や Select が使えそうです。ためしに Range[100] で調べてみたら41個ありました。


入力にかかった時間は1分か2分くらいで,計算時間は0.14秒でした。手計算でやって答案も作るとなると,この数十倍かかるでしょう。Mathematica さまさまです。

証明するには?

証明にはオイラーのファイ関数を使って,周期性を利用したいですね。


29^k を n=30, 31, ... , 36 で割った余りの周期は 8,30,16,20,16,24,12 です。1周期分の和を求めてみました。


あとはこれをもう一度 n で割ったり,2017をΦ(n)で割った余りの処理をしたりすれば解けます。実際に答案をつくるとなるともう少し工夫すると思いますが,この程度なら手計算でもなんとかできるでしょう。もっとも高校数学の問題でファイ関数をおおっぴらに使ってよいかどうかは微妙ですが。

まとめ

中高生に「Mathematica 使ったわ~」と言うと,大体において「ずるい!」と言われてしまいますが,要は使い方です。数式処理ソフトで実例をたくさん作った上で証明を考えると,効率的ないい勉強になるでしょう。Mathematica と同じ会社から出ている Wolfram Alpha なら無料で使えるので,おすすめです。

www.wolframalpha.com

大学への数学 2017年 05 月号 [雑誌]

大学への数学 2017年 05 月号 [雑誌]

*1:この記事は応募締切日の翌日を公開日に設定して書いています。