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

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

已知: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

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

9 r = a % b;

10 a = b;

11 b = r;

12 }

13 printf("最大公约数为:%d\n",a); // 此时b的值已经在a中了,所以输出的a就是最大公约数

14 return 0;

15 }

ef2ca8015ae67f078ed69b2f07b7703c.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值