ピタゴラス数とは、a2+b2=c2を満たすa,b,cの整数の組の事を言います。言うまでも無く、この式はピタゴラスの定理で知られる通り直角三角形の各辺の長さの関係を表しています。つまり、ピタゴラス数とは3辺の長さが整数の直角三角形という事です。
定義どおりにピタゴラス数を求めるプログラムを作成しました。見ての通り3重ループがあるため、大きな範囲まで計算しようとすると大変遅くなります。式を変形して2重ループで処理させる方法もあるのですが、そうするとプログラムが直感的では無くなってしまいますのでここでは省きました。またこのプログラムではピタゴラス数の整数倍を排除していませんので、必要以上に多くの結果を出力してしまいます。
#include <stdio.h>
#include <stdlib.h>
int main( int ac, char *av[] )
{
int a, b, c, aa, bb, cc, max_n;
/* コマンドラインからピタゴラス探索範囲を決定する */
if( ac < 2 ) {
printf( "usage : pythagoras min_n max_n\n" );
return( 1 );
}
max_n = strtol( av[1], NULL, 10 );
/* 探索範囲の数を調べる */
for( c = 1; c < max_n; c++ ) {
cc = c * c;
for( b = 1; b < c; b++ ) {
bb = b * b;
for( a = 1; a < b; a++ ) {
aa = a * a;
if( aa + bb == cc )
printf( "%d %d %d\n", a, b, c );
}
}
}
return( 0 );
}