ピタゴラス数の生成:2
★前の記事でご紹介したのは、網羅的な方法でした。
網羅的ではないけれど、すごく面白い方法を見つけましたので、ご紹介します。
話はすごく単純なんですね。
(n+1)^2=n^2+2n+1
という誰でも知っている展開式を
(n+1)^2=n^2+(2n+1)
右辺で、こういうふうに、くくってみると面白い。
詳しくは上の図を読んで下さい。
この考え方をプログラムにしてみました。
「PRGRM.txt」をダウンロード
これもテキストファイルです。
3つのプログラムが書いてありますが、いずれも同じ結果を与えます。
「***** 1 *****」のプログラム
これは、律儀に奇数を順次作って行って、その奇数が平方数だったらn+1とnを出力する、というプログラムです。
ここで「i_sqr()」という自作の関数を使っていますが、これ、ひっそり内緒で自慢の関数「整数平方根」です。
昔、パズルを解くプログラムの問題を解いて応募していた時に。
話は全部整数でやっていけるのに、途中で平方根を求めないとならない部分があったのですね。でも、必要なのは平方根の整数部分だけ。
で、全部整数でできるのに、平方根関数だけ実数を使うのは癪に障るというので作ったのが「整数平方根」という自作の関数。奇数を順次たしていくと平方数になるという性質を使ったもの。
1+3=4
1+3+5=9
1+3+5+7=16
・・・
ね。
解答が載った号で、「面白い関数を作った方がいます」と紹介されて舞い上がったものでした。
それを思い出して再現してみました。
平方根の整数部分だけを返す関数です。
結果の初めの方はこうです。すべての奇数についてピタゴラス数の組が作れるのが面白いでしょ。
ただし
20 21 29
こういう組が生成されてきませんから、網羅的ではないのです。
3 4 5
5 12 13
7 24 25
9 40 41
11 60 61
13 84 85
15 112 113
17 144 145
19 180 181
21 220 221
23 264 265
25 312 313
27 364 365
29 420 421
31 480 481
33 544 545
35 612 613
37 684 685
39 760 761
41 840 841
43 924 925
「***** 2 *****」のプログラム
これは、奇数の平方数を探すのではなく、奇数の自乗は奇数だ、という性質を使ったものです。
奇数を順番につくって、それを自乗し、その数を半分にするんですね。でも奇数だからジャスト半分にはならなくって、差が1の2数にします。これだけ。
この方法を覚えておくと、ちょっと手軽に人を驚かせるかもしれませんね。
13の自乗は169(これは暗算でできますね。)
169=84+85(これも暗算でできます。)
で、13と84と85はピタゴラス数。上の表にもありますね。
これを暗算でやって、どうだすごいだろう、とやってみて下さい。中学生あたりにはうけるかもしれません。
「***** 3 *****」のプログラム
これは、1,2の方法を、完全に公式化してしまったもの。
nを1から順次1ずつ増やしていけば
a = 2 * n + 1
b = 2 * n * n + 2 * n
c = 2 * n * n + 2 * n + 1
これでピタゴラス数になります。確認してください。
単純でしょ。
★記事をアップロードした当初、ファイルが文字化けしましたが「Unicode(UTF-8)」で保存し直して再アップロードしたところ、文字化けが解消しました。知識不足でご迷惑をかけたかと思います。申し訳ありませんでした。(10/31記)
« ピタゴラス数の生成:1 | トップページ | EV »
「理科おじさん」カテゴリの記事
- 化学の日(2022.10.26)
- 秒速→時速(2022.09.01)
- 風速75メートル(2022.08.31)
- 「ウクライナで生まれた科学者たち」(2022.05.31)
- 反射光(2022.05.09)
« ピタゴラス数の生成:1 | トップページ | EV »
コメント