午後のひとときに数学の問題を解いてみる。
数学問題
以下の問題の自然数x、yをすべて求めよ。
但し、x<yとする。
(1) x2+y2=61
(2) x2+y2=612
(3) x2+y2=613
(4) x2+y2=614
(5) x2+y2=615
プログラミング問題
数学問題を踏まえて、
x2+y2=61n
0<n<11
を効率よくx, yをみつけるプログラムを作れ。
ということでした。
前回、5ずつインクリメントするプログラムを書きましたが、
n | x | y |
1 | 5 | 6 |
2 | 60 | 11 |
3 | 305 | 366 |
3 | 415 | 234 |
4 | 1320 | 3479 |
4 | 3660 | 671 |
5 | 9475 | 27474 |
5 | 18605 | 22326 |
5 | 25315 | 14274 |
6 | 80520 | 212219 |
6 | 194220 | 117469 |
6 | 223260 | 40931 |
7 | 577975 | 1675914 |
7 | 1134905 | 1361886 |
7 | 1544215 | 870714 |
7 | 1752665 | 266286 |
8 | 4911720 | 12945359 |
8 | 9184560 | 10361041 |
8 | 11847420 | 7165609 |
8 | 13618860 | 2496791 |
9 | 3302155 | 108089046 |
9 | 35256475 | 102230754 |
9 | 69229205 | 83075046 |
9 | 94197115 | 53113554 |
9 | 106912565 | 16243446 |
10 | 299614920 | 789666899 |
10 | 520632300 | 665045051 |
10 | 560258160 | 632023501 |
10 | 722692620 | 437102149 |
10 | 830750460 | 152304251 |
実は、もう少しだけ効率のよいプログラムが書けます。
どこをどうすれば良いでしょうか。
ということでした。
前回書いたプログラムは5ずつインクリメントしましたが、
解をみると、どちらか1方は必ず6の倍数です。
ということは、6ずつインクリメントさせても解は求まるということです。
5と6の違いですが、6の方が効率が良いことがわかります。
手計算で、n=1から3までは求めましたよね。
52+62=611 …(1)
112+602=612 …(2)
n=1、2は1式ずつ見つかりました。
n=3は、
(1)式と(2)式の積から、
(52+62)(112+602)=613
(1)式は残し、(2)式は右辺を使って、
(52+62)612=613
(5・61)2+(6・61)2=613
3052+3662=613 …(3)
でn=3の一つを求めることが容易に出来ます。
ということは、
4152+2342=613 …(4)
を求める方法を考えれば良いとも言えます。
n=4は、
(2)式を使って、
(112+602)(112+602)=614
(112+602)612=614
(11・61)2+(60・61)2=614
6712+36602=614 …(5)
でn=4の一つを容易に求められる。
もう一つの解も、(2)式のx、yを使って、
(602-112)2+(2・60・11)2=(602+112)2
34792+13202=614 …(6)
と求められる。
n=5は、
(3)式と(4)式に、(2)式を掛けたものを考え、
(3052+3662)612=615
186052+223262=615 …(7)
(4152+2342)612=615
253152+142742=615 …(8)
と容易に求まる。
ということは、
94752+274742=615 …(9)
を求める方法を考えれば良いとも言えます。
n=6は、
(5)式と(6)式に、(2)式を掛けたものを考え、
(6712+36602)612=616
409312+2232602=616 …(10)
(34792+13202)612=616
2122192+805202=616 …(11)
残りの一つは(4)式のx、yを使って、
(4152-2342)2+(2・415・234)2=(4152+2342)2
1174692+1942202=616 …(13)
と求まる。
ここまでで解ることは、
(4)式と(9)式を求める方法が確立されていないこと。
n=偶数のときは、過去のデータから立式して解が求まるが、
n=奇数のときは、過去のデータから立式することが出来ていない。
逆に言えば、未来のデータから立式して過去の解を求めるということが出来るとも言える。
n>3のx、yは双方とも61の倍数である。
そう考えると、プログラミングは、61のインクリメントで良いという考えも出来る。
また、(4)式や(9)式は、x、yが有理数、つまり有理数解の過去の式があって、それが表に出てきたということなのかもしれません。
とりあえず、今回はこの辺で。
ではでは