最大公约数-----欧几里得算法

Posted 砂糖橘子君

tags:

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

欧几里得算法:

  如果求两个数的最大公约数,那么最一般的求法是设置一个变量i=1,然后i不断加一,如果i加到某个数后两个数都能整除这个数了,然后把这个变量保存下来,然后最后的结果中最大的就是最大公约数.

  然而这种方法时间复杂度可想而知有多高,所以一般情况瞎并不用这种方法,那么就有下面的欧几里得算法:

  输入:两个数 a,b

  输出:两个数的最大公约数 c

  欧几里得算法:(1)找出两个数中最大的和最小的,分别为tmax、tmin,

         (2)不断令设置一个变量t代表tmin,tmin赋值为tmax  mod(%) tmin,然后再将t赋值给tmax

         (3)当tmin等于0的时候退出循环

  剩下的tmax就是最大公约数

  证明过程可以参考刘汝佳的《算法设计竞赛入门经典》第二版

  代码如下:

    

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 
 6 int gcd(int a,int b){
 7     int tmax = a>b?a:b;
 8     int tmin = a<b?a:b;
 9     while(tmin){
10         int t= tmax % tmin;
11         tmax = tmin;
12         tmin = t;
13     }
14 return tmax;
15 }

 

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

努力理解这段代码如何输出欧几里得算法

最大公约数伪代码

欧几里得算法和扩欧

通俗易懂----欧几里得算法

查找两个数的最大公约数——欧几里得算法

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