C语言求最大公约数常用三种算法

天天见闻 天天见闻 2022-05-03 教育 阅读: 201
摘要: 第一步:任意给定两个正整数;判断它们是否都是偶数。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。其中所说的“等数”,就是最大公约数。所以更相减损法也叫等值算法。例1.用更相减损术求98与63的最大公约数。例2.用更相减损术求260和104的最大公约数。所以,260与104的最大公约数等于13乘以第一步中约掉的两个2,即13*2*2=52。

一、辗转相除法

也叫欧几里德算法

例如c语言求最大公约数,求gcd(319,377):

∵ 377÷319=1(余58)

∴gcd(319,377)=gcd(319,58);

∵ 319÷58=5(余29),

∴ gcd(319,58)=gcd(58,29);

∵ 58÷29=2(余0),

∴ gcd(58,29)= 29;

∴ gcd(319,377)=29.

#include
int main(){
    int u=319,v=377,temp=0;
     while(v!=0){
        temp=u%v;
        u=v;
        v=temp;
     }
     printf("The largest common divisor:%d",u);
    return 0;
}

二、更相减损法

出自《九章算术》“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”

翻译成现代语言如下:

第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。

第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。

其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。所以更相减损法也叫等值算法。

例1.用更相减损术求98与63的最大公约数。

解:由于63不是偶数,把98和63以大数减小数,并辗转相减:

98-63=35

63-35=28

35-28=7

28-7=21

21-7=14

14-7=7

所以,98和63的最大公约数等于7。

这个过程可以简单的写为:

(98,63)=(35,63)=(35,28)=(7,28)=(7,21)=(7,14)=(7,7)=7.

例2.用更相减损术求260和104的最大公约数。

解:由于260和104均为偶数,首先用2约简得到130和52,再用2约简得到65和26。

此时65是奇数而26不是奇数c语言求最大公约数,故把65和26辗转相减:

65-26=39

39-26=13

26-13=13

所以,260与104的最大公约数等于13乘以第一步中约掉的两个2,即13*2*2=52。

这个过程可以简单地写为:

(260,104)(/2/2) =>(65,26)=(39,26)=(13,26)=(13,13)=13. (*2*2) => 52

#include
#include
int main(){
    int a=0,b=0,count=0,multi=0;
    scanf("%d%d",&a,&b);
     while(a%2==0 && b%2==0){
        a/=2; b/=2;
        count++;
     }
     while(a!=b){
        if(a>b) a=a-b;
        else b=b-a;
     }
     multi=pow(2,count);
     printf("The largest common divisor:%d",a*multi);
    return 0;
}

三、穷举法

简单来说,就是选两个数a、b中的较小值min,然后因数 i 从min开始递减穷举,当满足这两个数模以 i 等于0时,此时 i 就为最大公因数。

#include
int main (){
   int a=0,b=0,i=0,min=0;
   scanf ("%d%d",&a,&b);
   min=a//两者最小
   for (i=min; ; i--) //穷举
       if ( a%i == 0 && b%i ==0 )
           break;
   printf("The largest common divisor:%d\n", i);
} 

引用:

百度百科

其他相关
C语言求最大公约数、最小公倍数

C语言求最大公约数、最小公倍数

作者: 天天见闻 时间:2022-05-03 阅读: 178
b)的公约数相同,其最大公约数也必然相等,得证。用C语言写的求最大公约数的代码:二、求最小公倍数知道了如何求最大公约数,那么有没有什么好方法求最大公倍数?因此,只要求得a,b的最大公约数c,则a,b的最小公倍数即为(a*b)/c...
C语言:求最大公约数和最小公倍数!

C语言:求最大公约数和最小公倍数!

作者: 天天见闻 时间:2022-05-02 阅读: 204
相信大家对最大公约数和最小公倍数一定不会陌生吧,那么在这里我就不做太多的解释了,直接上代码:#4:a:c:2:b:1:c:c:a:9:9:1:a:f:7:1:c:e:8:c:1:0:3:2:0:2:c:b:b:d:1:6#方法1和方法2其实是一样的,就是函数中的两种不同表示而已,大家选择自己比较熟悉的方法写就行了!...
《雍正王朝》一场斗殴闹剧,藏着一个坑死大清的经济大坑

《雍正王朝》一场斗殴闹剧,藏着一个坑死大清的经济大坑

作者: 天天见闻 时间:2022-02-21 阅读: 2087
作为一部“处处是戏”的经典古装剧,从上世纪末火热至今的《雍正王朝》里,塑造了很多让人深刻的人物与剧情。第22集“孙嘉诚户部斗殴”的桥段,就是叫多少追剧粉丝印象深刻的一段。在《雍正王朝》剧情里,这触目惊心的真相,也让雍正帝猛醒,表面上斥责了孙嘉诚,然后却全盘接纳了孙嘉诚的建议,对大清铜钱政策进行强力改革。是为《雍正王朝》里戏份不多,却塑造得极为成功的一个角色。...
已检测出一大堆肯德基疯狂星期四的文案!复制!请求复制!

已检测出一大堆肯德基疯狂星期四的文案!复制!请求复制!

作者: 天天见闻 时间:2022-02-22 阅读: 1888
我想问一问苍天,明天肯德基疯狂星期四,谁请我吃?我凝神静气,在纸上认真写出了一行字:明天肯德基疯狂星期四,谁请我吃?看着他高大英俊的身影肯德基疯狂星期四,我有些恍惚,想起了老公腆着啤酒肚的邋遢相貌。一种异样的感情开始在心里萌芽,等他走后我开始仔细端详名片,只见上面赫然写着:明天肯德基疯狂星期四,谁请我吃?...
属猪的人今年多大2020年,属猪的2020年几岁了

属猪的人今年多大2020年,属猪的2020年几岁了

作者: 天天见闻 时间:2022-02-23 阅读: 1566
属猪的人大多品行端正,心灵纯洁。肖猪人2020鼠年事业否极泰来属猪的朋友们由于在上一年的亥猪本命年中犯太岁,导致整年度运势极为阴晦暗淡,好在他们进入了2020子鼠年后,否极泰来,运势慢慢好转起来。肖猪人2020年财运收益可观属猪人在2020年的财运方面的运势是极为不错的。肖猪人2020的爱情略有波折属猪人在2020年的感情起伏较大,其状况各有差异,有乐观的一面但也有不少的波折。...
尺和厘米的换算(1尺等于多少cm )优质

尺和厘米的换算(1尺等于多少cm )优质

作者: 天天见闻 时间:2022-02-24 阅读: 1060
英尺和厘米之间的转换。尺子是中国古代常用的计量单位之一。与现在人们常用的米和厘米相比,1米等于3英尺,1英尺等于33.33厘米,当你想知道1\' 8等于多少厘米时,可以使用1.8 * 33.33 = 59.99厘米的深圳生活网换算方法,从而得到1\' 8等于59.99厘米的深圳生活网换算结果,同样可以计算出1英尺5等于1.5 * 33.33 = 49.99厘米。...
我来说两句

年度爆文