码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-02-12 11:19:22      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:最大   include   存在   复杂   main   算法   pre   辗转相除法   return   

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

时间复杂度

暴力: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 }

 

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

标签:最大   include   存在   复杂   main   算法   pre   辗转相除法   return   

原文地址:http://www.cnblogs.com/16-CHQ/p/6390503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!