C语言辗转相除法运用 24/1/22笔记错题整理

题目:

C语言辗转相除法运用 24/1/22笔记错题整理_第1张图片思路:一开始用最普通的方法去解题,计算量较大,但是

求最大公约数常用的有两种简单方法,一是九章算术中的更相减损术:大数减小数直到相等,相等的数即最大公约数,该算法时间复杂度约为O(N);二是欧几里得的辗转相除法:大数除以小数取余数(相当于模运算),直到余数为零时(也即模运算为零时)的除数(也即模数)就是最大公约数,该算法时间复杂度非常小

求最小公倍数的方法:原始数据的乘积除以最大公约数。

题解1:(普通)

#define _CRT_SECURE_NO_WARNINGS 1
#include 

int main() {
    long long a, b;
    scanf("%lld%lld", &a, &b);
    int max, min;
    if (a > b)
    {
        min = b;
        max = a;
    }

    else {
        min = a; max = b;
    }
    for (int i = min; i > 0; i--)
    {
        if (min % i == 0 && max % i == 0)
        {
            a = i; break;
        }
    }
    for (int i = max; i >= max; i++)
    {
        if (i % min == 0 && i % max == 0)
        {
            b = i; break;
        }
    }
    printf("%lld", a + b);

    return 0;
}

题解2:(辗转相除法)

这个方法运用了较多的数学知识,比较简单。

​
 #include 

 int main()
 {
long long n,m,tmp,min,max,k;
k=m*n;
scanf("%lld%lld",&n,&m);
 
while(n&&m)
{
if(n>m)n%=m;
else m%=n;

}
max=n>m?m:n;
min=k/max;
printf("%lld",max+min);

 }

总结:辗转相除法:大数除以小数取余数(相当于模运算),直到余数为零时(也即模运算为零时)的除数(也即模数)就是最大公约数

最小公倍数的方法:原始数据的乘积除以最大公约数。

先用辗转相除法求最大公约数,再利用它去求最大公倍数,妙中之妙

你可能感兴趣的:(笔记,c语言,算法)