[复习]欧几里得 最大公约数与最小公倍数

来源:互联网 发布:ff14猫女捏脸数据 御姐 编辑:程序博客网 时间:2024/05/19 03:44

题目描述
请你求出两个正整数 M 和 N 的最大公约数和最小公倍数。

输入格式
一行,是两个正整数 M 和 N 。

输出格式
第一行,输出 M 和 N 的最大公约数。
第二行,输出 M 和 N 的最小公倍数。

样例数据1
输入

24 16

输出

8
48

样例数据2
输入

7 5

输出

1
35

备注
【数据范围】
对于 100% 的数据:1≤N,M≤10000 。

分析:欧几里得(辗转相除法)模板

代码

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<ctime>#include<cmath>#include<algorithm>#include<cctype>#include<iomanip>#include<queue>#include<set>using namespace std;int getint(){    int sum=0,f=1;    char ch;    for(ch=getchar();!isdigit(ch)&&ch!='-';ch=getchar());    if(ch=='-')    {        f=-1;        ch=getchar();    }    for(;isdigit(ch);ch=getchar())        sum=(sum<<3)+(sum<<1)+ch-48;    return sum*f;}int n,m; int gcd(int x,int y){    int m;    while(x%y)//不用管x、y哪个大,因为如果x小,辗转一次就反过来了    {        m=x%y;        x=y;        y=m;    }    return y;}int main(){    freopen("gcd.in","r",stdin);    freopen("gcd.out","w",stdout);    n=getint(),m=getint();    int x=gcd(n,m);    cout<<x<<'\n'<<n*m/x;//性质:最大公约数*最小公倍数=n*m    return 0;}

本题结。