辗转相除法

利用辗转相除法求 两数的最大公因数 或 最小公倍数

例如   求6497和3869的最大公因数和最小公倍数

  6497÷3869=1……2628

  3869÷2628=1……1241

  2628÷1241=1……146

  1241÷146=8……73

  146÷73=2……0

     则  最大公因数为  73

          最小公倍数为   6497×3869÷73=344341

如下 代码

#include<iostream>
using namespace std;
int s[500];
__int64 x,y;
int g(int a,int b)      
{
    int i,t;
    y=a*b;
    if(a<b){
        t=a;
        a=b;
        b=t;
    }
    while(b){
        t=b;
        b=a%b;
        a=t;
    }
    return y/a;     // a为两数的最大公因数,y/a为两数的最小公倍数
}
void f(int s[],int n)
{
    x=s[0];
    for(int i=1;i<n;i++){
        x=g(s[i],x);
    }
    cout<<x<<endl;
}
int main()
{
    int n;
    cin>>n;
    while(n--){
        int a;
        cin>>a;
        for(int i=0;i<a;i++)cin>>s[i];   //求数组s中所有数的最大公因数最小公倍数
        f(s,a);
    }
    //system("pause");
    return 0;
}

 

posted @ 2016-02-11 20:45  Not-Bad  阅读(246)  评论(0编辑  收藏  举报