首页 > 编程语言 > 详细

算法:辗转相除法求最大公约数(C语言实现)

时间:2019-12-05 09:36:00      阅读:75      评论:0      收藏:0      [点我收藏+]

辗转相除法,一种求最大公约数的算法

已知:A / B = C ······ R  (A、B、C、R皆是整数)

假设:D是A的余数,D也是B的余数,那么D就是A和B的公约数

D是A和B的约数,则A和B是D的倍数,B * C也是D的倍数

既然A与B*C都是D的倍数,那么A与B*C的也是D的倍数

A - B*C = R

所以R也是D的倍数

如果D是A或B的公约数,那么D也是B和R的公约数

故:(A,B)= (B,R)

由以上证明则可以求出最大的公约数

例如:求72和28的最大公约数

72 / 28 = 2 ······ 16

↓      ↓      ↓          ↓

28 / 16 = 1 ······ 12

↓      ↓      ↓          ↓

16 / 12 = 1 ······ 4

↓      ↓      ↓         ↓

12 / 4  =  3  ······ 0

现在可以知道 72与28的最大公约数是4

 

 1 #include <stdio.h> 
 2 int main(){
 3     int a;                    // 除数
 4     int b;                    // 被除数
 5     int r=1;                 // 余数,赋初值为1 
 6     printf("输入除数与被除数(空格分开):");
 7     scanf("%d %d",&a,&b);
 8     while(r!=0){             // 如果a<b,亦无需颠倒ab,在计算中商0余除数本身,在下次运算中自可颠倒回来 
 9         r = a % b;
10         a = b;
11         b = r;
12     }
13     printf("最大公约数为:%d\n",a);        // 此时b的值已经在a中了,所以输出的a就是最大公约数 
14     return 0;
15 }

技术分享图片

 

 

算法:辗转相除法求最大公约数(C语言实现)

原文:https://www.cnblogs.com/zxkwdw/p/11986695.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!