用C语言实现求两个数的最大公约数

作者:内蒙古淘贝游戏开发公司 阅读:110 次 发布时间:2023-06-16 14:46:15

摘要:C语言求最大公约数最大公约数在数学中非常重要,它是在求两个数的最大公因数的同义词。而在C语言中,求最大公约数有多种方法。方法一:暴力枚举法暴力枚举法就是枚举从2到两个数中较小的一个数,看他们是否能够同时整除已知的两个数。若找到符合条件的就输出,否则输出1。由于...

C语言求最大公约数

用C语言实现求两个数的最大公约数

最大公约数在数学中非常重要,它是在求两个数的最大公因数的同义词。而在C语言中,求最大公约数有多种方法。

方法一:暴力枚举法

暴力枚举法就是枚举从2到两个数中较小的一个数,看他们是否能够同时整除已知的两个数。若找到符合条件的就输出,否则输出1。由于最小的公约数是1,所以最坏的情况下遍历整个数组。

C语言代码如下:

```c

#include

int gcd(int a,int b){

int i,min;

min=a

for(i=min;i>1;i--) //枚举从2到最小值

if(a%i==0&&b%i==0) //当i可同时整除两个数的时候则跳出循环

break;

if(i==1) //当枚举到1时,两个数没有公共的约数

return 1;

else

return i;

}

void main(){

int a,b;

printf("请输入两个整数:");

scanf("%d%d",&a,&b);

printf("%d和%d的最大公约数是:%d",a,b,gcd(a,b));

}

```

方法二:辗转相除法

辗转相除法(又称欧几里得算法)是求两个非负整数的最大公约数的一种方法,其基本思想是用较大数除以较小数,再用出现的余数去除较小数(第一次除数是10,余数是6,第二次除数是6,余数是4,第三次除数是4,余数是2,第四次除数是2,余数是0,则最大公约数为2),如此反复,直到余数是0为止;此时,负数的除数即为这两个数的最大公约数。

C语言代码如下:

```c

#include

int gcd(int a,int b){

return b==0?a:gcd(b,a%b);

}

void main(){

int a,b;

printf("请输入两个整数:");

scanf("%d%d",&a,&b);

printf("%d和%d的最大公约数是:%d",a,b,gcd(a,b));

}

```

方法三:更相减损法

更相减损法又叫减法求最大公约数,是公元前3世纪中国的一位叫做朱世杰的数学家发明的。more subtract less法的名字说明了它是利用较大的数减去较小的数,然后用得到的差值再去减较小的数。在大约17世纪的欧洲,更相减损法被广泛应用,直到1760年代表了上限的辗转相除法才开始替代更相减损法。

C语言代码如下:

```c

#include

int gcd(int a,int b){

if(a==b)

return a; //当两个数相同时,返回任意一个数

if((a&1)==0&&(b&1)==0) //两个数是偶数时,最大公约数也是2的倍数,将两个数同时除以2

return gcd(a>>1,b>>1)<<1; //递归调用

if((a&1)==0&&b&1!=0) //若a是偶数,b是奇数,则将a除以2

return gcd(a>>1,b);

if((a&1)!=0&&b&1==0) //若a是奇数,b是偶数,则将b除以2

return gcd(a,b>>1);

int big=a>b?a:b;

int small=a+b-big;

return gcd(big-small,small);

}

void main(){

int a,b;

printf("请输入两个整数:");

scanf("%d%d",&a,&b);

printf("%d和%d的最大公约数是:%d",a,b,gcd(a,b));

}

```

以上三种方法都可以用于C语言中求最大公约数。在实际使用的过程中,可以根据需求选择不同的方法,以便获得更高的效率和更快的速度。

  • 原标题:用C语言实现求两个数的最大公约数

  • 本文链接:https://qipaikaifa1.com/tb/11425.html

  • 本文由内蒙古淘贝游戏开发公司小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与淘贝科技联系删除。
  • 微信二维码

    CTAPP999

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:189-2934-0276


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部