两个数的最大公因数

想要找出两个数的最大公因数,最笨的方法就是蛮力法,除此之外还有欧几里得算法(包括除法和减法)。

第一种方法:蛮力法
蛮力法就是注意寻找最小公因数,然后在相乘,就是数学中的短除法找最大公因数

int main() {
    int m;
    int n;
    int factor = 1;
    printf("请输入m和n:\n");

    //m和n的值随机产生
    srand(time(0));
    m = rand() % 100 + 1;//产生[1-101)的随机数
    n = rand() % 100 + 1;

    printf("n = %d\n", n);
    printf("m = %d\n", m);

    //2开始找公因数,逐一相乘
    for (int i = 2; i <= m && i <= n; i++) {
        while (m % i == 0 && n % i == 0){
            factor *= i;
            m /= i;
            n /= i;
        }
    }

    printf("最大公因数 = %d", factor);

    return 0;
}

第二种方法:欧几里得算法(除法)
算法思想:
1、 r = m % n;
2、循环以下步骤直到 r 等于0
(1)m=n;
(2)n=r;
(3)r=m%n;
3、n就是最大公因数,输出 n ;

代码如下:

int main() {
    int m;
    int n;
    int factor;

    srand(time(0));

    m = rand() % 100 + 1;
    n = rand() % 100 + 1;

    /*大数除以小数或者小数除以大数都可以 但大数除以小数好理解一下*/
    m = m > n ? m : n;//把大数赋给m
    n = m < n ? m : n;//把小数赋给n

    factor = m % n;

    printf("m = %d\n", m);
    printf("n = %d\n", n);

    printf("------------------------\n");

    while(factor != 0){
        m = n;
        n = factor;
        factor = m % n;
    }

    factor = n;

    printf("factor = %d\n", factor);

    return 0;
}

第三种方法:欧几里得算法(减法)
算法思想:
1、r= m – n;(m>n)
2、循环以下步骤直到 r 等于0
(1)m=n;(n>r)
(2)n=r;(n>r)
(3)r=m – n;
3、n就是最大公因数,输出 n ;

代码如下:

int main() {
    int m;
    int n;
    int factor;

    srand(time(0));

    m = rand() % 100 + 1;
    n = rand() % 100 + 1;

    m = m > n ? m : n;
    n = m < n ? m : n;

    factor = m - n;

    printf("m = %d\n", m);
    printf("n = %d\n", n);
    printf("------------------------\n");

    while(factor != 0){
        m = n > factor ? n : factor;//把大数赋给m
        n = n < factor ? n : factor;//把小数赋给n
        factor = m - n;
    }

    factor = n;

    printf("factor = %d\n", factor);
    return 0;
}
    原文作者:布丁吖
    原文地址: https://blog.csdn.net/engerla/article/details/79599909
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞