辗转相除法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了辗转相除法相关的知识,希望对你有一定的参考价值。

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

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

 

以上是关于辗转相除法的主要内容,如果未能解决你的问题,请参考以下文章

辗转相除法求最大公约数------一行代码

辗转相除法求最大公约数c语言代码

(C++)一行代码递归实现辗转相除法

两行代码求解C语言最大公约数

SQL如何做除法

整数除法的解释——C代码