最大公约数与最小公倍数

1.最大公约数

一般使用辗转相除法即欧几里得算法来计算。

设有两数a,b,求这两个数的最大公约数

代码如下:

这里有一个性质:设有两数a,b,求这两个数的最大公约数

gcd(a,b)=gcd(b,a%b)   且等同于 gcd(a,b)=gcd(b,a-b),因为多减几次相当于a%b了

这里使用了三目运算符:x?a:b

当x为true时,整个表达式为a的值;当x为false时,整个表达式为b的值。

形式(1)

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int gcd(int a,int b)
 5 {
 6     return b?gcd(b,a%b):a;
 7 }
 8 int main()
 9 {
10     int a,b;
11     cin>>a>>b;
12     int ans=gcd(a,b);
13     cout<<ans;
14     return 0;
15 }

形式(2)

#include<iostream>
#include<cstdio>
using namespace std;
int gcd(int x,int y)
{
    int t;
    while(y)
    {
        t=x%y;
        x=y;
        y=t;
    }
    return x;
}
int main()
{
    int a,b;
    cin>>a>>b;
    int ans=gcd(a,b);
    cout<<ans;
    return 0;
}

2.最小公倍数

可利用公式

gcd(a,b)*lcm(a,b)=a*b

来计算

设有两数a,b,求这两个数的最小公倍数

代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
int main()
{
    int a,b;
    cin>>a>>b;
    int ans=(a*b)/gcd(a,b);
    cout<<ans;
    return 0;
}
原文地址:https://www.cnblogs.com/theshorekind/p/14288606.html