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