C++最小公倍数を実現

884 ワード

最小公倍数=2乗/最大公約数
最小公約数を求めて欧得数里アルゴリズム(つまり伝説の転がり相殺法)を使うことができます
int gcd(int a,int b)
{
    if(b==0)
        return a;
    return 
        gcd(b,a%b);
}

使用することもできます(この2つの方法の原理は同じです)
 int gcd(int x,int y)
 {
   while(x!=y)
   {

       if(x>y) x=x-y;
        else
        y=y-x;
   }
   return x;
   //     
 }

2つの数の積が整数の範囲を超える場合があるので、a/gcd(a,b)*bの順序を調整することができます.
先に取り除くと、ある程度オーバーフローを避けることができます
#include
#include
#include
#include
using namespace std;
int gcd(int,int);
 int main(int argc,char *argv[])
 {
     int x,y;
    while(cin>>x>>y)
    {
      cout<y) x=x-y;
        else
        y=y-x;
   }
   return x;
   //     
 }