首页 > 代码库 > 欧几里德算法求最大公约数
欧几里德算法求最大公约数
求最大公约数有暴力法和辗转相除法
时间复杂度
暴力: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 }
欧几里德算法求最大公约数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。