« ピタゴラス数の生成:1 | トップページ | EV »

2012年10月30日 (火)

ピタゴラス数の生成:2

★前の記事でご紹介したのは、網羅的な方法でした。
網羅的ではないけれど、すごく面白い方法を見つけましたので、ご紹介します。
Pythadoc

話はすごく単純なんですね。
(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 »

理科おじさん」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« ピタゴラス数の生成:1 | トップページ | EV »

2021年5月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
サイト内検索
ココログ最強検索 by 暴想
無料ブログはココログ