(C++)二つの整数値xとyの最大公約数をユークリッドの互除法で求める関数
Posted: 2009年4月03日(金) 01:47
また分からない問題に直面してしまったので質問します。
C++で二つの整数値xとyの最大公約数をユークリッドの互除法を使って求めたいのですが
int gcd(int x, int y);
一応、xが大きければ求めることはできたのですがyの値を大きくするとエラーになってしまいます。
どなたかご指摘お願いしますm(_ _)m
無駄な部分・簡単にできる部分もありましたらご指摘お願いします。
以下、問題の文のコピーです。
ユークリッドの互除法は、二つの整数を長方形の変の長さとする。短いほうの辺を一辺とする正方形で埋め尽くす。
残った長方形に対して同じ操作を繰り返す。正方形のみで埋め尽くされたとき、その正方形の辺の長さが最大公約数である。
C++で二つの整数値xとyの最大公約数をユークリッドの互除法を使って求めたいのですが
int gcd(int x, int y);
一応、xが大きければ求めることはできたのですがyの値を大きくするとエラーになってしまいます。
どなたかご指摘お願いしますm(_ _)m
#include<iostream>
#include<iomanip>
#include<ctime>
using namespace std;
int gcd(int x,int y);
int main(){
int x,y;
cout << "xの値:"; cin >> x;
cout << "yの値:"; cin >> y;
cout << "xとyの最大公約数をユークリッド互除法で求めると" << gcd(x,y) << "です。\n";
return 0;
}
int gcd(int x, int y){
int t = 0;
t = (x + y) / 2;
if(x && y != t){
if(x > y)
return gcd(x = x - x / y * y,y);
else if (x < y)
return gcd(x,y = y - y / x * x);
}
else if(x > y)
return t = x;
else
return t = y;
}
小数点以下切捨ての方法が分からないのでintで整数にしているのですが・・・。無駄な部分・簡単にできる部分もありましたらご指摘お願いします。
以下、問題の文のコピーです。
ユークリッドの互除法は、二つの整数を長方形の変の長さとする。短いほうの辺を一辺とする正方形で埋め尽くす。
残った長方形に対して同じ操作を繰り返す。正方形のみで埋め尽くされたとき、その正方形の辺の長さが最大公約数である。