Zhejiang Edition "C Programming Language (3rd Edition)" Title Set Problem 4-7 and least common multiple of the greatest common divisor (15 minutes)

Here Insert Picture Description

method one:

Common practice

#include <stdio.h>
/*最大公约数:m除以这个数余0,n除以这个数也余0,且是公因子中最大的*/
int f1(int m, int n)
{
    int i, min;
    min = m > n ? n : m;      //若m比n大,取n,否则取m.
    for (i = min; i > 0; i--) //因为是寻找最大公因子所以用--
        if (n % i == 0 && m % i == 0)
            return i;
}
/*最小公倍数:这个数既是m的倍数,也是n的倍数,且是倍数中最小的*/
int f2(int m, int n)
{
    int i, max, min, ret;
    max = m > n ? m : n;
    min = m > n ? n : m;
    for (i = 1;; i++)
        if (min * i % max == 0)
            return min * i;
}
int main()
{
    int M, N;
    scanf("%d %d", &M, &N);
    printf("%d %d", f1(M, N), f2(M, N));
    return 0;
}

Method Two:

Euclidean algorithm:

  • Find a larger number of smaller numbers.
  • Large numbers of decimal remainder.
  • Assign a decimal large numbers.
  • The remainder is assigned to a decimal.
/*辗转相除法*/
int f1(int m, int n)
{
    int i, min, max, remainder, ret;
    min = m > n ? n : m;
    max = m > n ? m : n;
    while (min)
    {                          //直到小数等于0,退出循环。
        remainder = max % min; //大数对小数求余。
        max = min;             //小数赋给大数。
        min = remainder;       //余数赋给小数。
    }
    ret = max; //最大公约数。
    return ret;
}

A method, two binding method, as follows:

#include <stdio.h>
int main()
{
    int M, N, max, min, i;
    scanf("%d %d", &M, &N);
    max = M > N ? M : N;
    min = M > N ? N : M;
    for (i = min; i > 0; i--)
        if (max % i == 0 && min % i == 0)
        {
            printf("%d", i);
            break;
        }
    for (i = 1;; i++)
        if (min * i % max == 0)
        {
            printf(" %d", min * i);
            break;
        }
    return 0;
}
Published 165 original articles · won praise 117 · Views 7803

Guess you like

Origin blog.csdn.net/qq_44458489/article/details/105320686