MZ80.+userの日記: 10^2+11^2+12^2=13^2+14^2=365
日記 by
MZ80.+user
(長文注意)
TwitterのTLに流れてきた表題の件について
おもしろそうなのと、(自称)サイエンスコミュニケーター(のつもり)のネタになりそうなので遊んでみました。
1)まず手計算で確認。本当に365になるのね。すごい!
2)連続した別の整数の組で同様のことが起こるか確認。
ちょっと考えれば、高々2通りかないことは分かるので、あと1組。すぐ見つかる。
(-2,-1,0,1,2) => (-2)^2+(-1)^2+0^2 = 1^2 + 2^2 = 5
3)少し条件を緩めて2組の連続した整数の組を考えて
(a,a+1,a+2),(b,b+1) => a^2+(a+1)^2+(a+2)^2 = b^2+(b+1)^2 (*1)
が成り立つパターンを調べてみる。
まずは数式で考えてみる
(*1) => 3*a^2 + 6*a + 5 = 2*b^2 + 2*b +1
=> a = -1 ± sqrt(6*b^2 + 6*b -3)/3
aが整数になるためには sqrt(6*b^2 + 6*b -3) が3の倍数になればいいので
sqrt(6*b^2 + 6*b -3)= 3k kは0以上の整数
=> 6*b^2 + 6*b -3 = 9*k^2
=> b = -1 ± sqrt(6*k^2 + 3)/2 (*2)
=> a = -1 ± k (*3)
4) (*2)(*3) をもとに Excell で k=0,1,2,3・・・・で計算させてa,bを求め
ともに整数になるパターン(実質はbが整数になるパターン)を探す。
(簡略のため a = -1+k , b = -1+sqrt(6*k^2 + 3)/2 のみ表記)
(1) k=1, a=0, b=1
0^2 + 1^2 + 2^2 = 1^2 + 2^2 = 5
(2) k=11, a=10, b=13
10^2+11^2+12^2=13^2+14^2=365 (表題のパターン)
(3) k=109, a=108, b=133
108^2+109^2+110^2 = 133^2+134^2 =35645
とりあえず、k=500までやってみましたが次が見つからず。
5)そこでスクリプトに切り替え。こうゆうときはBignumのあるRubyでプログラミング。(^ ^;)
(以下転記ミスの可能性あり)
(4) k=1079, a=1078, b=1321 (*1)=3492725
(5) k=10681, a=106810, b=13081 (*1)=342251285
(6) k=105731, a=105730, b=129493 (*1)=33537133085
(7) k=1046629, a=1046628, b=1281853 (*1)=3286296790925
このあたりからちょっと古めのPen4マシンでも厳しくなる。
また、雑なプログラミングなので浮動小数点計算の誤差から正しくない値も出始める。
そのため、a,bの値を出したあと、Bignumで検算するプログラムを追加。
6)ここで、いままで出てきた値から傾向をつかんで、集中して計算することにする。
(傾向その1) kが1桁(0~9)で 1コ、 kが2桁(10~99)で1コ
kが3桁(100~999)で 1コ、 kが4桁(1000~9999)で1コ
よって kの桁が増えると、1コ見つかる? (*4)
(傾向その2) aの一番上の位の数字が (2)以降すべて 1
その次の位の数字が (3)以降すべて 0
その次の位の数字が (3)以降 8,7,6,5,4 と1ずつ減少 (*5)
(傾向その3) (*1)の値の1の位の値が全て5 (*6)
(*4),(*5)より kやaは (8)では10300000 (9)では102000000
(10)では1010000000 あたり?
計算してみると・・ (以下 a,bのみ)
(8) a = 10360558, b = 12689041
(9?) a = 102558960, b = 125608561
(10?) a = 1015229050, b = 1243396573 当たり!!
(注)(8)以降については途中は計算してないので、別のa,bの組があるかもしれません。
7)じゃあ、次の(11)は10090000000 あたり?と思って計算してみるのですが見つかりません。
(*6)が正しければ、aの1の位が0か8、つまりkの1の位が1か9なので、5倍速く計算できるはずですが、これぐらいがわたしの限界かな。所詮しろ~との頭の体操ですので、ツッコミはご勘弁を。
それにしてもRubyのBignumは偉大だわ。
TwitterのTLに流れてきた表題の件について
おもしろそうなのと、(自称)サイエンスコミュニケーター(のつもり)のネタになりそうなので遊んでみました。
1)まず手計算で確認。本当に365になるのね。すごい!
2)連続した別の整数の組で同様のことが起こるか確認。
ちょっと考えれば、高々2通りかないことは分かるので、あと1組。すぐ見つかる。
(-2,-1,0,1,2) => (-2)^2+(-1)^2+0^2 = 1^2 + 2^2 = 5
3)少し条件を緩めて2組の連続した整数の組を考えて
(a,a+1,a+2),(b,b+1) => a^2+(a+1)^2+(a+2)^2 = b^2+(b+1)^2 (*1)
が成り立つパターンを調べてみる。
まずは数式で考えてみる
(*1) => 3*a^2 + 6*a + 5 = 2*b^2 + 2*b +1
=> a = -1 ± sqrt(6*b^2 + 6*b -3)/3
aが整数になるためには sqrt(6*b^2 + 6*b -3) が3の倍数になればいいので
sqrt(6*b^2 + 6*b -3)= 3k kは0以上の整数
=> 6*b^2 + 6*b -3 = 9*k^2
=> b = -1 ± sqrt(6*k^2 + 3)/2 (*2)
=> a = -1 ± k (*3)
4) (*2)(*3) をもとに Excell で k=0,1,2,3・・・・で計算させてa,bを求め
ともに整数になるパターン(実質はbが整数になるパターン)を探す。
(簡略のため a = -1+k , b = -1+sqrt(6*k^2 + 3)/2 のみ表記)
(1) k=1, a=0, b=1
0^2 + 1^2 + 2^2 = 1^2 + 2^2 = 5
(2) k=11, a=10, b=13
10^2+11^2+12^2=13^2+14^2=365 (表題のパターン)
(3) k=109, a=108, b=133
108^2+109^2+110^2 = 133^2+134^2 =35645
とりあえず、k=500までやってみましたが次が見つからず。
5)そこでスクリプトに切り替え。こうゆうときはBignumのあるRubyでプログラミング。(^ ^;)
(以下転記ミスの可能性あり)
(4) k=1079, a=1078, b=1321 (*1)=3492725
(5) k=10681, a=106810, b=13081 (*1)=342251285
(6) k=105731, a=105730, b=129493 (*1)=33537133085
(7) k=1046629, a=1046628, b=1281853 (*1)=3286296790925
このあたりからちょっと古めのPen4マシンでも厳しくなる。
また、雑なプログラミングなので浮動小数点計算の誤差から正しくない値も出始める。
そのため、a,bの値を出したあと、Bignumで検算するプログラムを追加。
6)ここで、いままで出てきた値から傾向をつかんで、集中して計算することにする。
(傾向その1) kが1桁(0~9)で 1コ、 kが2桁(10~99)で1コ
kが3桁(100~999)で 1コ、 kが4桁(1000~9999)で1コ
よって kの桁が増えると、1コ見つかる? (*4)
(傾向その2) aの一番上の位の数字が (2)以降すべて 1
その次の位の数字が (3)以降すべて 0
その次の位の数字が (3)以降 8,7,6,5,4 と1ずつ減少 (*5)
(傾向その3) (*1)の値の1の位の値が全て5 (*6)
(*4),(*5)より kやaは (8)では10300000 (9)では102000000
(10)では1010000000 あたり?
計算してみると・・ (以下 a,bのみ)
(8) a = 10360558, b = 12689041
(9?) a = 102558960, b = 125608561
(10?) a = 1015229050, b = 1243396573 当たり!!
(注)(8)以降については途中は計算してないので、別のa,bの組があるかもしれません。
7)じゃあ、次の(11)は10090000000 あたり?と思って計算してみるのですが見つかりません。
(*6)が正しければ、aの1の位が0か8、つまりkの1の位が1か9なので、5倍速く計算できるはずですが、これぐらいがわたしの限界かな。所詮しろ~との頭の体操ですので、ツッコミはご勘弁を。
それにしてもRubyのBignumは偉大だわ。