欧几里德算法求最大公约数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧几里德算法求最大公约数相关的知识,希望对你有一定的参考价值。

求最大公约数有暴力法和辗转相除法

时间复杂度

暴力:O(N)

辗转相除法:O(2logN)

 

辗转相除法原理:

设c为A B 的最大公约数 则存在K1 K2 使 A=K1*c B=K2*c;

r为A模B r=A - K3*B;

      r=K1*c-K3*k2*c;

    r=(K1-K2*K3)*c;

所以A 和 B 的余数一定是最大公约数c的倍数

 

 1 #include <stdio.h>
 2 
 3 int gcd(int a, int b)
 4 {
 5     int temp, r;
 6     if(a<b)
 7     {
 8         temp = a;
 9         a = b;
10         b = temp;
11     }
12     while(a % b)
13     {
14         r = a%b;
15         a = b;
16         b = r;
17     }
18     return b;
19 }
20 
21 int main()
22 {
23     int a, b, answer;
24     scanf("%d%d",&a,&b);
25     answer = gcd(a,b);
26     printf("%d\n",answer);
27     return 0;
28 }

 

以上是关于欧几里德算法求最大公约数的主要内容,如果未能解决你的问题,请参考以下文章

求最大公约数的欧几里得算法与其伪代码

两行代码求解C语言最大公约数

欧几里得算法求最大公约数(gcd)

求最大公约数——欧几里得算法

欧几里德算法--求最大公约数

算法欧几里德算法--求最大公约数