最大公约数与最小公倍数

来源:互联网 发布:女娲 知乎 编辑:程序博客网 时间:2024/06/03 19:41

C/C++训练1---最大公约数与最小公倍数

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

输入两个整数,求它们的最大公约数与最小公倍数。

Input

输入两个整数,两个整数之间用空格分开。

Output

第一行输出最大公约数;
第二行输出最小公倍数。

Example Input

64 48

Example Output

16192

Hint


Author


解题思路:

     

*求最大公约数算法:

(1)辗转相除法

两整数a和b:

① a%b得余数c

② 若c=0,则b即为两数的最大公约数,结束

③ 若c≠0,则a=b,b=c,再回去执行①

(2)相减法

两整数a和b:

① 若a>b,则a=a-b

② 若a<b,则b=b-a

③ 若a=b,则a(或b)即为两数的最大公约数,结束

④ 若a≠b,则再回去执行①

(3)穷举法:

① i= a b中的小数

② 若a,b能同时被i整除,则i即为最大公约数,结束

③ i--,再回去执行②

*求最小公倍数:

      最小公倍数 = 两数相乘 / 最大公约数;

实现代码:

(1)辗转相除法:

#include<stdio.h>
int main()
{
    int a, b, c, d, e, temp;
    scanf("%d %d", &a, &b);
    d = a;
    e = b;
    if(a<b)
        temp = a, a = b, b = temp;
    while (b!=0)
    {
        c = a % b;
        a = b;
        b = c;
    }
    printf("%d\n%d\n", a, (d * e) / a);
return 0;
}

(2)相减法:
#include<stdio.h>
int main()
{
    int a, b, d, e;
    scanf("%d %d", &a, &b);
    d = a;
    e = b;
    if(a!=b)
    {
        while (a!=b)
    {
       if(a>b)
       a = a - b;
       if(a<b)
        b = b - a;
    }
    }
    printf("%d\n%d\n", a, (d * e) / a);
return 0;
}

(3)穷举法
#include<stdio.h>
int main()
{
    int a, b, d, e, c;
    scanf("%d %d", &a, &b);
    d = a;
    e = b;
    if(a<b)
        c = a;
    else
        c = b;
    while(a%c!=0||b%c!=0)
    {
        c--;
    }
    printf("%d\n%d\n", c, (d * e) / c);
return 0;
}

1 0
原创粉丝点击