Quantcast
Channel: 円周率近似値の日に生まれて理系じゃないわけないだろ! - knifeのblog
Viewing all articles
Browse latest Browse all 5376

(x+y+z)(1/x+1/y+1/z)=n part3

$
0
0

y1が求まったら、もう1つのy2を計算する方法。

gcd()とlcm()のサブルーチンを作っておく必要があります。

l1=lcm(y1, z1)/y1;
x2=l1*x1;
z2=l1*z2;
y2=z1*x2/y1; もしくは y2=x2*z1/y1;
g2=gcd(x2, y2, z2);
x2/=g2;

y2/=g2;
z2/=g2;
という手順で、小数を一切扱っていません。

プログラム的には、同じ値を何度も求めるのは意味がないので、

例えば、lcmを求めるにも、gcdを使います。
l1=y1*gcd(y1, z1)/z1;
と書け、分解すると、
g1=gcd(y1,z1);
l1=y1*g1/z1;
となり、

g2=gcd(x2. y2, z2);
も、
g2=gcd(gcd(x2, z2), y2);
と解釈でき、
gcd(x2, z2);
は、

gcd(l1*x1, l1*z1);
であるから、
g2=gcd(g1*l1, y2);
という結論になる。

まぁ、プログラムに組み込んでも良いんだけど、出力されたデータは片割れなわけで、どのみちExcelに取り込んで利用するので、片割れの計算はExcelにやらせても良い。

なかなか新しい答えは出力しないから、暇になるな。
パラメータを与えて、区切って沢山動かすかな。
z<100000くらいまでやりたいな。


ではでは


Viewing all articles
Browse latest Browse all 5376

Trending Articles