![見出し画像](https://assets.st-note.com/production/uploads/images/133287202/rectangle_large_type_2_189c7888a1a7a98e8c3f167ed629ca40.png?width=1200)
原始ピタゴラス数、(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 #プログラム #数学がすき