//////////////////////////////////////////////////////////////////////////////////////// //  Ver.0.1 alpha1 // //////////////////////////////////////////////////////////////////////////////////////// /* [出力Debugは任意] ---------------汎用関数(局所,個所関数で構成される)------------------- NO汎用加算 Addb(A,B) →A+Bを返す NO汎用減算 Subb(A,B) →A-Bを返す NO汎用乗算 Mulb(A,B) →A*Bを返す NO汎用除算[余] Divb(A,B) →A/Bの商,余り NO汎用除算[∞] Dive(A,B,C) →A/Bを小数点以下C桁まで実行 ---------------局所関数(自然数のみを扱う)--------------------- OK自然数加算 Add_min(A,B,Debug) →A+Bを返す,Debug OK自然数減算 Sub_min(A,B,Debug) →A-Bを返す,Debug OK自然数乗算 Mul_min(A,B,Debug) →A*Bを返す,Debug NO自然数除算[余り] Divd_min(A,B,Debug) →A/Bの商,余り,Debug ---------------特殊関数(特殊計算を行う)------------------------- NO累乗 Invo(A,B,Debug) →A^Bを返す,Debug NO階乗 Fact(A,Debug) →A!を返す,Debug NO平方数 Root(A,B,Debug) →√(A)をB小数点以下桁計算し返す,Debug ---------------個所関数(細かい動作を行う)----------------------- OK小数点除去 DelDeci(A) →小数点を取り除いたA,後ろから数えた小数点の位置 OK10桁区切 OnCut(A) →10桁ごとに区切って出力 OK区切解除 UnCut(A) →10桁ごとの区切りを解除 */ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■ 局 所 関 数   局 所 関 数    局 所 関 数    局 所 関 数 ■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 自然数加算 Add_min //////////////////////////////////////////////////////////////////////////////////////// function Add_min(A,B,Debug){ //Debug if(String(Debug)=="0"){ Start = new Date; var Debug_time = Start.getTime(); } if(A=="0"){ if(Debug=="0"){return B+",0,"+B.length;}else{return B;} } if(B=="0"){ if(Debug=="0"){return A+",0,"+A.length;}else{return A;} } if(A.length > B.length){var A_2=A;var B_2=B;} if(A.length < B.length){var A_2=B;var B_2=A;} if(A.length==B.length){var A_2=A;var B_2=B;} var Up=0; var C=""; //桁数揃え while(A_2.length%15!=0){ A_2="0"+A_2; } while(B_2.length%15!=0){ B_2="0"+B_2; } var limit = A_2.length/15; //加算 var addlim=1; while(addlim<=limit){ var A_X = A_2.substr(A_2.length-addlim*15,15); while(A_X.charAt(0)=="0" && A_X.length>1){ A_X = A_X.substr(1,A_X.length-1); } if(addlim*15 > B_2.length){ var B_X="0"; //Bが今後0,繰り上がりが0のとき計算を中止 if(Up==0){ C= A_2.substr(0,A_2.length-addlim*15+15)+C; //左側の0を除去 while(C.charAt(0)=="0" && C.length>1){ C = C.substr(1,C.length-1); } //Debug if(String(Debug)=="0"){ End = new Date; Debug_time = (End.getTime()-Debug_time)/1000; C+=","+Debug_time+","+C.length; } return C; } }else{ var B_X = B_2.substr(B_2.length-addlim*15,15); while(B_X.charAt(0)=="0" && B_X.length>1){ B_X = B_X.substr(1,B_X.length-1); } } var APB = eval(A_X)+eval(B_X)+Up; if(String(APB).length==16){ APB = String(APB).substr(1,15); Up=1; }else{ Up=0; } while(String(APB).length!=15){ APB = "0"+APB; } C = String(APB)+C; addlim++; } C = Up+C; //左側の0を除去 while(C.charAt(0)=="0" && C.length>1){ C = C.substr(1,C.length-1); } //Debug if(String(Debug)=="0"){ End = new Date; Debug_time = (End.getTime()-Debug_time)/1000; C+=","+Debug_time+","+C.length; } return C; } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 自然数減算 Sub_min //////////////////////////////////////////////////////////////////////////////////////// function Sub_min(A,B,Debug){ //Debug if(String(Debug)=="0"){ Start = new Date; var Debug_time = Start.getTime(); } if(A=="0"){ if(Debug=="0"){return B+",0,"+B.length;}else{return B;} } if(B=="0"){ if(Debug=="0"){return A+",0,"+A.length;}else{return A;} } if(A.length > B.length){ var A_2=A; var B_2=B; var Mark=""; } if(A.length < B.length){ var A_2=B; var B_2=A; var Mark="-"; } if(A.length==B.length){ if(A==B){ if(Debug=="0"){return "0,0,0";}else{return 0;} }else{ for(lengthno=0 ; lengthno= B.charAt(lengthno)){ var A_2=A; var B_2=B; var Mark=""; }else{ var A_2=B; var B_2=A; var Mark="-"; } } } } var Up=0; var C=""; //桁数揃え while(A_2.length%15!=0){ A_2="0"+A_2; } while(B_2.length%15!=0){ B_2="0"+B_2; } var limit = A_2.length/15; //減算 addlim=1; while(addlim<=limit){ var A_X = A_2.substr(A_2.length-addlim*15,15); while(A_X.charAt(0)=="0" && A_X.length>1){ A_X = A_X.substr(1,A_X.length-1); } if(addlim*15 > B_2.length && B_X.length>1){ B_X="0"; }else{ var B_X = B_2.substr(B_2.length-addlim*15,15); while(B_X.charAt(0)=="0" && B_X.length>1){ B_X = B_X.substr(1,B_X.length-1); } } var APB = eval(A_X)-eval(B_X)-Up; if(String(APB).charAt(0)=="-"){ ABP=APB*(-1); Up=1; }else{ Up=0; } while(String(APB).length!=15){ APB = "0"+APB; } C = String(APB)+C; addlim++; } //左側の0を除去 while(C.charAt(0)=="0" && C.length>1){ C = C.substr(1,C.length-1); } //Debug if(String(Debug)=="0"){ End = new Date; Debug_time = (End.getTime()-Debug_time)/1000; C+=","+Debug_time+","+C.length; } C=Mark+C; return C; } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 自然数乗算 Mul_min //////////////////////////////////////////////////////////////////////////////////////// function Mul_min(A,B,Debug){ //Debug if(String(Debug)=="0"){ Start = new Date; var Debug_time = Start.getTime(); } //6桁区切りの計算の最大数 var limitA = Math.ceil(A.length/8); var limitB = Math.ceil(B.length/8); var AB = "0"; var A_Loop=0; while(A_Loop1){ Multiplication_A=Multiplication_A.substr(1,Multiplication_A.length-1); } var B_Loop=0; while(B_Loop1){ Multiplication_B=Multiplication_B.substr(1,Multiplication_B.length-1); } if(Multiplication_A=="99999999"&&Multiplication_B=="99999999"){ var AB_1 = "9999999800000001"; }else{ var AB_1 = String(eval(Multiplication_A)*eval(Multiplication_B)); } var AB_2 = AB_1+A_Zero+B_Zero; if(AB_2!="0"){ AB=Add_min(AB,AB_2,"1"); }else{ AB=AB; } B_Loop++; } A_Loop++; } //左側の0を除去 while(AB.charAt(0)=="0" && AB.length>1){ AB=AB.substr(1,AB.length-1); } var C=AB; //Debug if(String(Debug)=="0"){ End = new Date; Debug_time = (End.getTime()-Debug_time)/1000; C+=","+Debug_time+","+C.length; } return C; } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■ 特 殊 関 数   特 殊 関 数    特 殊 関 数    特 殊 関 数 ■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 階乗関数 Fact //////////////////////////////////////////////////////////////////////////////////////// function Fact(String){ now= new Date; var time=now.getTime(); var String_flow = "1"; var String_Factorial="1"; for(Lv1=0;Lv1