ピタゴラス数についての考察を紹介します。
c2≦nを満たすピタゴラス数(a2 + b2 = c2 a,b,c(1≦a≦b≦c)は正整数)の求め方を考察する。
cの値が与えられたとする。ピタゴラス数は格子点(0,0)と格子点(c,c)を結ぶ対角線より上側の4分円a2+b2=c2 (0≦a≦c,0≦b≦c)上に存在する。平面の格子点(a,b)を(0,c)から出発し、4分円に沿って見落としがないようにたどっていくと、効率よくピタゴラス数をさがすことができる。下図の赤線に沿って探索する。探索が終了すれば、cの値をひとつ増やし、同様の探索をc2の値がnの値に達するまで繰り返す。
●ピタゴラス数生成プログラム
/* << pg211.c >> */ #include <stdio.h> int main () { double a,b,c, count, /* ピタゴラス数の個数。*/ n, /* nの値。*/ w; /* nの値を読み込む。*/ scanf("%lf",&n); /* 初期設定。*/ c = 1; count = 0; /* ピタゴラス数の探索。*/ while( c*c <= n ) { a = 1; b = c; while( a <= b ) { w = a*a + b*b - c*c; if( w == 0 ) { count++; printf("%d: ",(int)count); printf("%d %d %d\n",(int)a,(int)b,(int)c); } if( w > 0 ) { b--; } else { a++; } } c++; } printf("n=%16.0lf\n",n); printf("count=%16.0lf\n",count); }