九度OJ 题目1056:最大公约数&&题目1438:最小公倍数

来源:互联网 发布:卸载软件找不到程序 编辑:程序博客网 时间:2024/05/16 19:10

题目1056:最大公约数

题目描述:

输入两个正整数,求其最大公约数。

输入:

测试数据有多组,每组输入两个正整数。

输出:

对于每组输入,请输出其最大公约数。

样例输入:
49 14
样例输出:
7
来源:
2011年哈尔滨工业大学计算机研究生机试真题
题目1438:最小公倍数
题目描述:

给定两个正整数,计算这两个数的最小公倍数。

输入:

输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数。

输出:

对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。

样例输入:
10 14
样例输出:
70

本题直接采用欧几里得算法:

欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。

定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。

同时,最小公倍数为两数的乘积除以它们的最大公约数。


# include <iostream>using namespace std;  int main(){    int a,b,c;       while(cin>>a>>b)    {        int t=0;        if(a<b){            t=a;            a=b;            b=t;        }        while(1){            t=a%b;            if(t==0){                c=b;                break;            }            a=b;            b=t;                    }        cout<<c<<endl;    }    return 0;}/**************************************************************    Problem: 1056    Language: C++    Result: Accepted    Time:0 ms    Memory:1420 kb****************************************************************/
1438题稍做修改:
# include <iostream>using namespace std;int main(){    int a,b,c;      while(cin>>a>>b)    {        int t=0,d=a*b;        if(a<b){            t=a;            a=b;            b=t;        }        while(1){            t=a%b;            if(t==0){                c=b;                break;            }            a=b;            b=t;                    }        c=d/c;        cout<<c<<endl;    }    return 0;}/**************************************************************    Problem: 1438    Language: C++    Result: Accepted    Time:10 ms    Memory:1420 kb****************************************************************/












0 0
原创粉丝点击