码迷,mamicode.com
首页 > 其他好文 > 详细

辗转相除法

时间:2016-02-11 21:31:01      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

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

例如   求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;
}

 

辗转相除法

标签:

原文地址:http://www.cnblogs.com/farewell-farewell/p/5186647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!