見出し画像

原始ピタゴラス数、(0,1)有理数、60の倍数の角度をもつ三角形のナンバリング 

これまで、原始ピタゴラス数、区間(0,1)の有理数、60の倍数の角度を持つ三角形に対し、一定のルールを定めてナンバリングしてきました。今回は、それらをまとめて表示するプログラム、及び、それら一部の情報から、他のものを表示するプログラムを示します。

まずは、原始ピタゴラス数、有理数、60の倍数の角度を持つ三角形を、それらに与えられている番号順に表示するプログラムです。

必要な情報を全てメモリに確保し出力しています。一覧表示する時は、この方法が効率的で、プログラム自体もシンプルになります。

番号順に一覧表示するプログラム


#include<stdio.h>
#include<stdlib.h>
#define N 1001

int _gcm(int a,int b){return (b==0)?a:_gcm(b,a%b);}
int gcm(int a,int b){
	if(a<0)a=-a;if(b<0)b=-b;if(a==b) return a==0?1:a;
	return (a>b)?_gcm(a,b):_gcm(b,a);
}
void print_sub(int m,int n){
	int g,tmp,xa=3*m*m-n*n,xb=2*m*n,x3=3*m*m+n*n,a=xb-xa,b=xb+xa,c=x3,d=2*xb;
    double x=(double)xa/(double)xb;
	if(b<0)b=-b;
	g=gcm(gcm(a,b),gcm(c,d));
	if(a>d){tmp=d;d=a;a=tmp;}
	if(a>b){tmp=b;b=a;a=tmp;}
    if(x>0.0)      printf("%5d/%-5d ; [%5d,%5d,%5d] 鋭 (%5d)\n",m,n,b/g,c/g,d/g,a/g);
    else if(x>-1.0)printf("%5d/%-5d ; [%5d,%5d,%5d] 鈍 (%5d)\n",m,n,a/g,c/g,d/g,b/g);
    else if(x>-3.0)printf("%5d/%-5d ; [%5d,%5d,%5d] 重 (%5d)\n",m,n,a/g,b/g,c/g,d/g);
    else           printf("%5d/%-5d ; [%5d,%5d,%5d] 退 (%5d)\n",m,n,a/g,b/g,d/g,c/g);
}

int main(int argc,char *argv[]){
    int i,j,f[N][4],m[N][3],a,b,c,d,s1,s2,*p,*q;

	for(i=2,f[1][0]=0,f[1][1]=1,f[1][2]=1,f[1][3]=1;i<N;i++){
		j=i%2;p=f[i];q=f[i/2];a=q[0];b=q[1];c=q[2];d=q[3];
        if(j==0){s1=0;s2=1;}else{s1=1;s2=0;}
		p[0]=a+s1*c;p[1]=b+s1*d;p[2]=s2*a+c;p[3]=s2*b+d;
	}
	for(i=2,m[1][0]=3,m[1][1]=4,m[1][2]=5;i<N;i++){
		j=(i+1)%3;p=m[i];q=m[(i+1)/3];a=q[0];b=q[1];c=q[2];
		if(j==0){s1=-1;s2=1;}else if(j==1){s1=1;s2=-1;}else{s1=-1;s2=-1;}
		p[0]= -  s1*a -2*s2*b + 2*c;
		p[1]= -2*s1*a -  s2*b + 2*c;
		p[2]= -2*s1*a -2*s2*b + 3*c;
	}
    for(i=1;i<N;i++){
        printf("%4d : (%5d,%5d,%5d) ; ",i,m[i][0],m[i][1],m[i][2]);
        print_sub(f[i][0]+f[i][2],f[i][1]+f[i][3]);        
    }
    printf("end\n");
    return 0;
}
   1: (    3,    4,    5) ;     1/2     ;  [    3,    7,    8] 鈍 (    5)
   2: (    5,   12,   13) ;     1/3     ;  [    0,    1,    1] 重 (    1)
   3: (   15,    8,   17) ;     2/3     ;  [    5,    7,    8] 鋭 (    3)
   4: (   21,   20,   29) ;     1/4     ;  [    5,   16,   19] 重 (   21)
   5: (    7,   24,   25) ;     2/5     ;  [    7,   37,   40] 鈍 (   33)
   6: (   45,   28,   53) ;     3/5     ;  [    8,   13,   15] 鋭 (    7)
   7: (   55,   48,   73) ;     3/4     ;  [   35,   43,   48] 鋭 (   13)
   8: (   33,   56,   65) ;     1/5     ;  [    3,    5,    7] 重 (    8)
   9: (   35,   12,   37) ;     2/7     ;  [    9,   56,   61] 重 (   65)
  10: (   65,   72,   97) ;     3/8     ;  [   11,   91,   96] 鈍 (   85)
  11: (   39,   80,   89) ;     3/7     ;  [    5,   19,   21] 鈍 (   16)
  12: (   77,   36,   85) ;     4/7     ;  [   55,   97,  112] 鈍 (   57)
  13: (  119,  120,  169) ;     5/8     ;  [   91,  139,  160] 鋭 (   69)
  14: (    9,   40,   41) ;     5/7     ;  [   24,   31,   35] 鋭 (   11)
  15: (   91,   60,  109) ;     4/5     ;  [   63,   73,   80] 鋭 (   17)
  16: (  105,   88,  137) ;     1/6     ;  [    7,    8,   13] 重 (   15)
  17: (   95,  168,  193) ;     2/9     ;  [   11,   24,   31] 重 (   35)
  18: (  117,   44,  125) ;     3/11    ;  [    7,   33,   37] 重 (   40)
  19: (  207,  224,  305) ;     3/10    ;  [   13,  120,  127] 重 (  133)
  20: (  105,  208,  233) ;     4/11    ;  [   15,  169,  176] 鈍 (  161)
  21: (  187,   84,  205) ;     5/13    ;  [    9,   61,   65] 鈍 (   56)
  22: (  297,  304,  425) ;     5/12    ;  [   17,   73,   80] 鈍 (   63)
  23: (   51,  140,  149) ;     4/9     ;  [   13,   43,   48] 鈍 (   35)
  24: (  209,  120,  241) ;     5/9     ;  [    7,   13,   15] 鈍 (    8)
  25: (  275,  252,  373) ;     7/12    ;  [   57,   97,  112] 鋭 (   55)
  26: (   85,  132,  157) ;     8/13    ;  [  231,  361,  416] 鋭 (  185)
  27: (   63,   16,   65) ;     7/11    ;  [   45,   67,   77] 鋭 (   32)
  28: (  133,  156,  205) ;     7/10    ;  [  187,  247,  280] 鋭 (   93)
  29: (  115,  252,  277) ;     8/11    ;  [  247,  313,  352] 鋭 (  105)
  30: (  273,  136,  305) ;     7/9     ;  [   16,   19,   21] 鋭 (    5)
  31: (  403,  396,  565) ;     5/6     ;  [   33,   37,   40] 鋭 (    7)
  32: (   57,  176,  185) ;     1/7     ;  [    7,    8,   15] 退 (   13)
  33: (  299,  180,  349) ;     2/11    ;  [   65,   88,  133] 重 (  153)
  34: (  377,  336,  505) ;     3/14    ;  [   85,  168,  223] 重 (  253)
  35: (  175,  288,  337) ;     3/13    ;  [   16,   39,   49] 重 (   55)
  36: (  165,   52,  173) ;     4/15    ;  [   19,   80,   91] 重 (   99)
  37: (  319,  360,  481) ;     5/18    ;  [   23,  120,  133] 重 (  143)
  38: (  217,  456,  505) ;     5/17    ;  [   11,   85,   91] 重 (   96)
  39: (  459,  220,  509) ;     4/13    ;  [   17,  208,  217] 重 (  225)
  40: (  697,  696,  985) ;     5/14    ;  [   19,  271,  280] 鈍 (  261)
  41: (   11,   60,   61) ;     7/19    ;  [   13,  127,  133] 鈍 (  120)
  42: (  153,  104,  185) ;     8/21    ;  [   29,  211,  224] 鈍 (  195)
  43: (  171,  140,  221) ;     7/18    ;  [   25,  157,  168] 鈍 (  143)
  44: (  189,  340,  389) ;     7/17    ;  [   24,  109,  119] 鈍 (   95)
  45: (  247,   96,  265) ;     8/19    ;  [  135,  553,  608] 鈍 (  473)
  46: (  429,  460,  629) ;     7/16    ;  [  115,  403,  448] 鈍 (  333)
  47: (  203,  396,  445) ;     5/11    ;  [   16,   49,   55] 鈍 (   39)
  48: (  345,  152,  377) ;     6/11    ;  [  119,  229,  264] 鈍 (  145)
  49: (  555,  572,  797) ;     9/16    ;  [  275,  499,  576] 鈍 (  301)
  50: (  145,  408,  433) ;    11/19    ;  [  105,  181,  209] 鋭 (  104)


  ...中略...


 950: ( 3925,12012,12637) ;    71/97    ;  [ 4872, 6133, 6887] 鋭 ( 2015)
 951: (20223,12136,23585) ;    52/71    ;  [10455,13153,14768] 鋭 ( 4313)
 952: (25573,22836,34285) ;    47/64    ;  [ 8547,10723,12032] 鋭 ( 3485)
 953: (11571,18980,22229) ;    61/83    ;  [ 3600, 4513, 5063] 鋭 ( 1463)
 954: (10769, 3360,11281) ;    64/87    ;  [ 5285, 6619, 7424] 鋭 ( 2139)
 955: (20915,23652,31573) ;    53/72    ;  [ 3625, 4537, 5088] 鋭 ( 1463)
 956: (14421,30380,33629) ;    45/61    ;  [ 1961, 2449, 2745] 鋭 (  784)
 957: (30719,14760,34081) ;    48/65    ;  [ 8927,11137,12480] 鋭 ( 3553)
 958: (46565,46452,65773) ;    37/50    ;  [ 5307, 6607, 7400] 鋭 ( 2093)
 959: (  891, 3220, 3341) ;    23/31    ;  [  513,  637,  713] 鋭 (  200)
 960: ( 6313, 3984, 7465) ;    22/29    ;  [ 1887, 2293, 2552] 鋭 (  665)
 961: ( 7611, 6580,10061) ;    35/46    ;  [ 4779, 5791, 6440] 鋭 ( 1661)
 962: ( 5069, 8700,10069) ;    45/59    ;  [ 1976, 2389, 2655] 鋭 (  679)
 963: ( 5607, 1976, 5945) ;    42/55    ;  [ 6887, 8317, 9240] 鋭 ( 2353)
 964: (10269,11300,15269) ;    49/64    ;  [ 9379,11299,12544] 鋭 ( 3165)
 965: ( 5883,11956,13325) ;    59/77    ;  [ 3400, 4093, 4543] 鋭 ( 1143)
 966: (11305, 5232,12457) ;    56/73    ;  [12255,14737,16352] 鋭 ( 4097)
 967: (17595,17812,25037) ;    43/56    ;  [ 7227, 8683, 9632] 鋭 ( 2405)
 968: ( 1185, 3008, 3233) ;    47/61    ;  [ 2160, 2587, 2867] 鋭 (  707)
 969: ( 4067, 2244, 4645) ;    64/83    ;  [16023,19177,21248] 鋭 ( 5225)
 970: ( 5537, 5184, 7585) ;    71/92    ;  [19723,23587,26128] 鋭 ( 6405)
 971: ( 1159, 1680, 2041) ;    61/79    ;  [ 3640, 4351, 4819] 鋭 ( 1179)
 972: (  621,  100,  629) ;    58/75    ;  [ 4389, 5239, 5800] 鋭 ( 1411)
 973: ( 1495, 1848, 2377) ;    65/84    ;  [ 5513, 6577, 7280] 鋭 ( 1767)
 974: ( 1729, 3960, 4321) ;    55/71    ;  [ 2961, 3529, 3905] 鋭 (  944)
 975: ( 4611, 2380, 5189) ;    38/49    ;  [ 5655, 6733, 7448] 鋭 ( 1793)
 976: ( 6625, 6408, 9217) ;    39/50    ;  [ 5963, 7063, 7800] 鋭 ( 1837)
 977: ( 1515, 4988, 5213) ;    57/73    ;  [ 3185, 3769, 4161] 鋭 (  976)
 978: ( 9017, 5544,10585) ;    68/87    ;  [ 6045, 7147, 7888] 鋭 ( 1843)
 979: (11147, 9804,14845) ;    61/78    ;  [ 4865, 5749, 6344] 鋭 ( 1479)
 980: ( 6109,10260,11941) ;    65/83    ;  [ 4144, 4891, 5395] 鋭 ( 1251)
 981: ( 6231, 2080, 6569) ;    76/97    ;  [22663,26737,29488] 鋭 ( 6825)
 982: (11725,13068,17557) ;    69/88    ;  [18683,22027,24288] 鋭 ( 5605)
 983: ( 7339,15180,16861) ;    51/65    ;  [ 2552, 3007, 3315] 鋭 (  763)
 984: (14841, 7000,16409) ;    48/61    ;  [ 9047,10633,11712] 鋭 ( 2665)
 985: (22795,22908,32317) ;    63/80    ;  [15587,18307,20160] 鋭 ( 4573)
 986: ( 1045, 4452, 4573) ;    67/85    ;  [ 4408, 5173, 5695] 鋭 ( 1287)
 987: ( 9855, 6448,11777) ;    56/71    ;  [12319,14449,15904] 鋭 ( 3585)
 988: (11461, 9660,14989) ;    49/62    ;  [ 9435,11047,12152] 鋭 ( 2717)
 989: ( 9843,17324,19925) ;    53/67    ;  [ 2760, 3229, 3551] 鋭 (  791)
 990: (11921, 4440,12721) ;    42/53    ;  [ 6935, 8101, 8904] 鋭 ( 1969)
 991: (21203,23004,31285) ;    27/34    ;  [ 2867, 3343, 3672] 鋭 (  805)
 992: (10965,21812,24413) ;    25/31    ;  [  616,  709,  775] 鋭 (  159)
 993: (19775, 8928,21697) ;    38/47    ;  [ 5695, 6541, 7144] 鋭 ( 1449)
 994: (31301,31980,44749) ;    47/58    ;  [ 8715, 9991,10904] 鋭 ( 2189)
 995: ( 4727,12864,13705) ;    43/53    ;  [ 1824, 2089, 2279] 鋭 (  455)
 996: (19005,10868,21893) ;    48/59    ;  [ 9095,10393,11328] 鋭 ( 2233)
 997: (25095,23048,34073) ;    57/70    ;  [12827,14647,15960] 鋭 ( 3133)
 998: ( 7473,11536,13745) ;    53/65    ;  [ 2773, 3163, 3445] 鋭 (  672)
 999: ( 5395, 1332, 5557) ;    40/49    ;  [ 6319, 7201, 7840] 鋭 ( 1521)
1000: (11505,13552,17777) ;    41/50    ;  [ 6643, 7543, 8200] 鋭 ( 1557)
end




出力画面には、
番号: 原始ピタゴラス数 ; $${(0,1)}$$有理数 ; 60の倍数の角度を持つ三角形
という順に表示されています。

原始ピタゴラス数は $${(a,b,c)}$$という形で表されていて、$${a^2+b^2=c^2}$$を満たします。$${(a,b,c)}$$の最大公約数は1で、$${b}$$が偶数になるようになってます。

$${(0,1)}$$有理数は区間$${(0,1)}$$にある有理数です。この区間の全有理数にユニークな番号を与えています。

60の倍数の角度を持つ三角形には$${[a,b,c]}$$とその後に「鋭」「鈍」「重」「退」及び$${(d)}$$を出力しています。「鋭」、「鈍」の場合は、$${a^2+c^2-ac=b^2,d=c-a}$$の関係があり、$${a^2+b^2}$$と$${ c^2}$$の大小で二つを区別しています。辺長$${b}$$の辺の対角が60度の角度を持ちます。「重」の場合は、$${a^2+b^2+ab=c^2,d=a+b}$$の関係があり、辺長$${c}$$の辺の対角が120度の角度を持ちます。「退」は、$${a+b=c,a^2+b^2+ab=d^2}$$の関係があります。縮退した三角形、つまり、180度あるいは、0度の角度を持つ三角形と見なし、このリストに加えています。なぜ加えたかについては、過去の記事をご覧下さい。


次のは、番号、ピタゴラス数の三辺、有理数、60の倍数の角度を持つ三角形の三辺のいずれかを入力すると、(必要な場合は)それが何番なのかを求め、番号、原始ピタゴラス数の三辺、有理数、60の倍数の角度を持つ三角形の三辺を出力するプログラムです。
整数一つだけを入力すると番号、二つ入力すると有理数、三つ入力すると、三角形の三辺が入力されたと判断し、対応する他の情報と共に表示するようになっています。


一部の情報から、番号、ピタゴラス数、有理数、三辺を求めるプログラム


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct set{
    int la;
    int lb;
    int lc;
    int ld;
    int type;
    int xa;
    int xb;
    int ta;
    int tb;
};

void set_p(int m,int n,int *p){p[0]=1;p[1]=m;p[2]=n;p[3]=0;p[4]=1;p[5]=1;p[6]=1;}
void f2n(int *p){     // p[0]に1、p[1]に分子,p[2] に分母を入れて呼び出すと、p[0]に順番を返す
	int t1=p[3]+p[5],t2=p[4]+p[6],x=p[1]*t2-p[2]*t1;   // 

	if(x==0){return;}
	else if(x>0){p[0]=2*p[0]+1;p[3]=t1;p[4]=t2;f2n(p);}
	else{        p[0]=2*p[0]  ;p[5]=t1;p[6]=t2;f2n(p);}
}
void n2f(int n,int *p){  //   nを指定すると、nに対応するNobita範囲を返す
	if(n==1){p[0]=0;p[1]=1;p[2]=1;p[3]=1;}
	else{
		int q[4];
		n2f(n/2,q);
		if((n&1)==1){p[0]=q[0]+q[2];p[1]=q[1]+q[3];p[2]=q[2];p[3]=q[3];}
		else{        p[0]=q[0];p[1]=q[1];p[2]=q[0]+q[2];p[3]=q[1]+q[3];}
	}
}

int p2n(int *p){
	if(p[2]>5){
		int q[3],r;
		q[0] = -  p[0] -2*p[1] + 2*p[2];
		q[1] = -2*p[0] -  p[1] + 2*p[2];
		q[2] = -2*p[0] -2*p[1] + 3*p[2];
		if(q[0]<0){q[0]=-q[0];if(q[1]<0){q[1]=-q[1];r=1;}else{r=-1;}}
        else{			      if(q[1]<0){q[1]=-q[1];r=0;}else{return 0;}}
		return 3*p2n(q)+r;
	}
    return (p[0]==3 && p[1]==4 && p[2]==5)?1:0;
}
void n2p(int n,int *p){
	int j,a,b,c,s1,s2,q[3];
	if(n==1){p[0]=3;p[1]=4;p[2]=5;return;}
	j=(n+1)%3;
	n2p((n+1)/3,q);
	a=q[0];b=q[1];c=q[2];
	if(j==0){s1=-1;s2=1;}else if(j==1){s1=1;s2=-1;}else{s1=-1;s2=-1;}
	p[0] = -  s1*a -2*s2*b + 2*c;
	p[1] = -2*s1*a -  s2*b + 2*c;
	p[2] = -2*s1*a -2*s2*b + 3*c;
}

int _gcm(int a,int b){return (b==0)?a:_gcm(b,a%b);}
int gcm(int a,int b){
    if(a<0)a=-a;if(b<0)b=-b;if(a==b) return a==0?1:a;
	return (a>b)?_gcm(a,b):_gcm(b,a);
}

void sort3(int *p){
    int max,mid,min;
    if(p[0]>p[1]){max=p[0];min=p[1];}else{max=p[1];min=p[0];}
    if(p[2]>max){mid=max;max=p[2];}else if(p[2]>min){mid=p[2];}else{mid=min;min=p[2];}
    p[0]=min;p[1]=mid;p[2]=max;
}
void abc2s(int *p,struct set *s){
    int a,b,c,d,dd,g;
    sort3(p);a=p[0];b=p[1];c=p[2];
    if(a<0||b<0||c<0){s->type=-1;return;}
    if(a+b==c){
        dd=a*a+b*b+a*b;d=(int)(sqrt((double)dd));
        if(dd==d*d){s->la=d;s->lb=a;s->lc=b;s->ld=c;s->type=4;
                s->xa=-a-2*b;s->xb=a;s->ta=-a-2*b+2*d;s->tb=3*a;
        }else{  s->type=-4;}
    }else if(a*a+b*b+a*b==c*c){
            s->la=c;s->lb=a;s->lc=b;s->ld=a+b;s->type=3;
            s->xa=-b-2*a;s->xb=b;s->ta=-2*a-b+2*c;s->tb=3*b;
    }else if(a*a+c*c-a*c==b*b){
        if(a*a+b*b<c*c){
            s->la=b;s->lb=a;s->lc=c-a;s->ld=c;s->type=2;
            s->xa=-c+2*a;s->xb=c;s->ta=2*a+2*b-c;s->tb=3*c;
        }else{
            s->la=b;s->lb=c-a;s->lc=a;s->ld=c;s->type=1;
            s->xa=-c+2*a;s->xb=c;s->ta=2*a+2*b-c;s->tb=3*c;
        }
    }else{  s->type=-6;}
    if(s->type<0)return;
    g=gcm(s->xa,s->xb);s->xa/=g;s->xb/=g;
    g=gcm(s->ta,s->tb);s->ta/=g;s->tb/=g;
}

void print_sub(int m,int n){
	int g,tmp,xa=3*m*m-n*n,xb=2*m*n,x3=3*m*m+n*n,a=xb-xa,b=xb+xa,c=x3,d=2*xb;
    double x=(double)xa/(double)xb;
	if(b<0)b=-b;
	g=gcm(gcm(a,b),gcm(c,d));
	if(a>d){tmp=d;d=a;a=tmp;}
	if(a>b){tmp=b;b=a;a=tmp;}
    if(x>0.0)      printf("%5d/%-5d ; [%5d,%5d,%5d] 鋭 (%5d)\n",m,n,b/g,c/g,d/g,a/g);
    else if(x>-1.0)printf("%5d/%-5d ; [%5d,%5d,%5d] 鈍 (%5d)\n",m,n,a/g,c/g,d/g,b/g);
    else if(x>-3.0)printf("%5d/%-5d ; [%5d,%5d,%5d] 重 (%5d)\n",m,n,a/g,b/g,c/g,d/g);
    else           printf("%5d/%-5d ; [%5d,%5d,%5d] 退 (%5d)\n",m,n,a/g,b/g,d/g,c/g);
}


int main(int argc,char *argv[]){
    int in[3],a,b,c,p[7],n,ta,tb,pt[3],ft[4],g,co;
    char buff[256];
    struct set s;

    LOOP:

    do{
        in[0]=in[1]=in[2]=0;
        printf("\ninput  [ n ]  or  [ m n ]  or  [ a b c ]  or  return\n");
        if(fgets(buff,256,stdin) == NULL){printf("err");return -1;}
        if((co=sscanf(buff,"%d %d %d",&in[0],&in[1],&in[2]))==-1){printf("return end\n");return 0;}
    }while(in[0]<0 || in[1]<0 || in[2]<0);


    if(co==1){
        if(in[0]==0){printf("n≠0 でなければなりません。\n");goto LOOP;}
        n=in[0];n2p(n,pt);n2f(n,ft);ta=ft[0]+ft[2];tb=ft[1]+ft[3];
        printf("n = %d\n",n);
    }else if(co==2){
        if((in[0]-in[1])*in[0]*in[1]==0){printf("m*n*(m-n)≠0 でなければなりません。\n");goto LOOP;}
        if(in[0]<in[1]){ta=in[0];tb=in[1];}else{ta=in[1];tb=in[0];}
        g=gcm(ta,tb);ta=ta/g;tb=tb/g;
        set_p(ta,tb,p);f2n(p);n=p[0];n2p(n,pt);
        printf("m/n = %d/%d  = %d/%d\n",ta*g,tb*g,ta,tb);
    }else{
        if(in[0]*in[1]*in[2]*(in[0]-in[1])*(in[1]-in[2])*(in[2]-in[0])==0){printf("a*b*c*(a-b)*(b-c)*(c-a) ≠0 でなければなりません。\n");goto LOOP;}
        sort3(in);
        if(in[0]*in[0]+in[1]*in[1]==in[2]*in[2]){
            g=gcm(in[0],in[1]);
            a=in[0]/g;b=in[1]/g;c=in[2]/g;
            if((a&1)==1){pt[0]=a;pt[1]=b;pt[2]=c;}
            else{        pt[0]=b;pt[1]=a;pt[2]=c;}
            n=p2n(pt);n2f(n,ft);ta=ft[0]+ft[2];tb=ft[1]+ft[3];
            printf("(%d,%d,%d) = %d*(%d,%d,%d)\n",a*g,b*g,c*g,g,a,b,c);
        }else{
            abc2s(in,&s);
            if(s.type>0){
                set_p(s.ta,s.tb,p);f2n(p);n=p[0];n2p(n,pt);ta=s.ta;tb=s.tb;
                printf("[%d,%d,%d]->{%d,%d,%d,%d}\n",in[0],in[1],in[2],s.la,s.lb,s.lc,s.ld);
            }else if(s.type==-4){
                sort3(in);a=in[0];b=in[1];c=a*a+b*b+a*b;
                printf("%d + %d = %dですが、%d^2 + %d^2 + %d*%d = %d は平方数ではありません。\n"
                ,a,b,in[2],a,b,a,b,c);
                goto LOOP;
            }else{
                printf("%d,%d,%d -> 60,90,120,180の角度を持つ三角形ではありません。\n",in[0],in[1],in[2]);
                goto LOOP;
            }
        }
    }
    printf("%4d : (%5d,%5d,%5d) ; ",n,pt[0],pt[1],pt[2]);print_sub(ta,tb);

    goto LOOP;
    printf("end\n");
    return 0;
}


input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
1
n = 1
   1 : (    3,    4,    5) ;     1/2     ; [    3,    7,    8] 鈍 (    5)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
2
n = 2
   2 : (    5,   12,   13) ;     1/3     ; [    0,    1,    1] 重 (    1)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
3
n = 3
   3 : (   15,    8,   17) ;     2/3     ; [    5,    7,    8] 鋭 (    3)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
4
n = 4
   4 : (   21,   20,   29) ;     1/4     ; [    5,   16,   19] 重 (   21)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
5
n = 5
   5 : (    7,   24,   25) ;     2/5     ; [    7,   37,   40] 鈍 (   33)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
100
n = 100
 100 : ( 1357, 1476, 2005) ;    15/26    ; [  779, 1351, 1560] 鈍 (  781)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
120
n = 120
 120 : ( 2665, 1272, 2953) ;    13/17    ; [  165,  199,  221] 鋭 (   56)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
1000
n = 1000
1000 : (11505,13552,17777) ;    41/50    ; [ 6643, 7543, 8200] 鋭 ( 1557)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
10000
n = 10000
10000 : (106329,119720,160121) ;    75/248   ; [ 7429,74400,78379] 重 (81829)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
1 2
m/n = 1/2  = 1/2
   1 : (    3,    4,    5) ;     1/2     ; [    3,    7,    8] 鈍 (    5)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
1 3
m/n = 1/3  = 1/3
   2 : (    5,   12,   13) ;     1/3     ; [    0,    1,    1] 重 (    1)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
1 4
m/n = 1/4  = 1/4
   4 : (   21,   20,   29) ;     1/4     ; [    5,   16,   19] 重 (   21)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
2 3
m/n = 2/3  = 2/3
   3 : (   15,    8,   17) ;     2/3     ; [    5,    7,    8] 鋭 (    3)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
4 6
m/n = 4/6  = 2/3
   3 : (   15,    8,   17) ;     2/3     ; [    5,    7,    8] 鋭 (    3)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
3 4
m/n = 3/4  = 3/4
   7 : (   55,   48,   73) ;     3/4     ; [   35,   43,   48] 鋭 (   13)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
4 5
m/n = 4/5  = 4/5
  15 : (   91,   60,  109) ;     4/5     ; [   63,   73,   80] 鋭 (   17)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
75 248
m/n = 75/248  = 75/248
10000 : (106329,119720,160121) ;    75/248   ; [ 7429,74400,78379] 重 (81829)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
1 2 3
1 + 2 = 3ですが、1^2 + 2^2 + 1*2 = 7 は平方数ではありません。

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
1 3 5
1,3,5 -> 60,90,120,180の角度を持つ三角形ではありません。

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
3 4 5
(3,4,5) = 1*(3,4,5)
   1 : (    3,    4,    5) ;     1/2     ; [    3,    7,    8] 鈍 (    5)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
6 8 10
(6,8,10) = 2*(3,4,5)
   1 : (    3,    4,    5) ;     1/2     ; [    3,    7,    8] 鈍 (    5)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
3 5 7
[3,5,7]->{7,3,5,8}
   8 : (   33,   56,   65) ;     1/5     ; [    3,    5,    7] 重 (    8)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
3 5 8
[3,5,8]->{7,3,5,8}
 128 : (  333,  644,  725) ;     1/9     ; [    3,    5,    8] 退 (    7)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
106329 119720 160121
(106329,119720,160121) = 1*(106329,119720,160121)
10000 : (106329,119720,160121) ;    75/248   ; [ 7429,74400,78379] 重 (81829)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
7429 74400 78379
[7429,74400,78379]->{78379,7429,74400,81829}
10000 : (106329,119720,160121) ;    75/248   ; [ 7429,74400,78379] 重 (81829)

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return
7429 74400 81829
7429 + 74400 = 81829ですが、7429^2 + 74400^2 + 7429*74400 = 1848300345 は平方数ではありません。

input  [ n ]  or  [ m n ]  or  [ a b c ]  or  return

return end


出力画面最後の方ですが、7429^2+74400^2+7429*74400=1848300345と計算してしまい、誤った結果を表示しています。正しい値は、これに2^32を加えた6143267641で、これは、78379^2に等しく、平方数です。
2^31を越える値が介在する場合には対応していませんが、興味を持った方は遊んでみて下さい。


#原始ピタゴラス数 #有理数 #60の倍数の角を持つ三角形 #元祖のび太算
#整列 #ナンバリング #c #プログラム #数学がすき

この記事が参加している募集

数学がすき

この記事が気に入ったらサポートをしてみませんか?