アプリ版:「スタンプのみでお礼する」機能のリリースについて

 2つの分数 U/SとV/tの足し算は、Sとtの最小公倍数を l とするとき、
u×l/S+u×l/t 分のlによっておこなわれるんですが、最小公倍数を
ユークリッドの互除法で求め、分数の足し算を分数のまま実行するには
どうプログラムすればよいのでしょうか?教えてください。
宜しくお願いいたします。 

 

A 回答 (2件)

まず、ユークリッドの互除法で求められるのは、最大公約数ですよね。



これは、
int Euclid(int S, int T){
int x,y,z;
x=S;y=T;
for(;;){
z=x%y;
if(z==0){break;}
x=y;y=z;
}
return y;
}
で、求まります。
最小公倍数は、
S*T/Euclid( S, T);
で求まります。
あとは、
l=S*T/Euclid( S, T);
((u*l/S)+(v*l/T))/l;
これで、U/S+V/Tが求められます。

部分部分細切れになっているので、つなげればできますよね。
    • good
    • 0
この回答へのお礼

勉強させられます。ありがとうございました。

お礼日時:2001/10/25 01:35

ユークリッドの互除法って最大公約数を求める理論ですよね?


何回も最大公約数を求めるのは面倒なので
足し算自体は 簡単に (分子1 * 分母2) + (分子2 * 分母1)で 分子
分母1 * 分母2 で 分母 を計算して

求めた分子と分母を最大公約数を使い約分しました。
なお参考ソースは 数値チェックや0除算などのチェックを行っていません。
コマンドボタンとテキストボックスを使用しました。

参考ソース
↓↓↓↓↓↓↓↓↓↓↓↓↓

Private Sub Command1_Click()

Dim la As Long
Dim lb As Long
Dim lm As Long
Dim ln As Long
Dim li As Long

Dim ltxtU1 As Long '分子入力1
Dim ltxtD1 As Long '分母入力1

Dim ltxtU2 As Long '分子入力1
Dim ltxtD2 As Long '分母入力1

Dim ltxtU3 As Long '分子答え
Dim ltxtD3 As Long '分母答え

ltxtU1 = Text1(0).Text
ltxtD1 = Text1(1).Text
ltxtU2 = Text1(2).Text
ltxtD2 = Text1(3).Text

la = (ltxtU1 * ltxtD2) + (ltxtU2 * ltxtD1) '分子
lb = (ltxtD1 * ltxtD2) '分母

lm = la
ln = lb

Do Until lm Mod ln = 0

li = lm Mod ln
lm = ln
ln = li

Loop

'最大公約数 = ln

ltxtU3 = la / ln
ltxtD3 = lb / ln

Text1(4).Text = ltxtU3
Text1(5).Text = ltxtD3

End Sub
    • good
    • 0
この回答へのお礼

これをもとに勉強したいと思います。ありがとうございました。

お礼日時:2001/10/25 01:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!