华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1515|回复: 4
打印 上一主题 下一主题

辗转相除法求最大公约数

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2018-6-28 19:46:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很经典的算法。小学老师讲的最大公约数一般用短除法,要经过很多次的试除,在c++里面实现并不容易,我们在这里使用辗转相除法。
设求a b两数的最大公约数,a=80,b=48,实际上等价于求b(=48)和 a%b(=32) 的最大公约数,直到a%b=0,这个是最大公约数就是b
  1. #include <iostream>
  2. using namespace std;
  3. int a,b,c;
  4. int main()
  5. {
  6.     cin>>a>>b;
  7.     c=a%b;
  8.     while (c!=0)
  9.     {
  10.         a=b;b=c;c=a%b;
  11.     }
  12.     cout<<b;
  13. }
复制代码



回复

使用道具 举报

0

主题

13

帖子

48

积分

新手上路

Rank: 1

积分
48
沙发
发表于 2018-7-15 15:46:52 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int a,b,c;
  4. int main()
  5. {
  6.     cin>>a>>b;
  7.     while(b>0)
  8.     {
  9.         c=a;
  10.         a=b;
  11.         b=c%b;
  12.     }
  13.     cout<<a;
  14.     return 0;
  15. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
板凳
 楼主| 发表于 2018-7-15 21:13:05 | 只看该作者
楼上的做法感觉有问题!
回复 支持 反对

使用道具 举报

5

主题

42

帖子

182

积分

注册会员

Rank: 2

积分
182
地板
发表于 2018-7-16 23:00:01 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int a,b,s;
  4. int main()
  5. {
  6.     cin>>a>>b;
  7.     s=a%b;
  8.     while(s!=0)
  9.     {
  10.         a=b;
  11.         b=s;
  12.         s=a%b;
  13.     }
  14.     cout<<b;
  15.     return 0;
  16. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-6 15:31 , Processed in 0.101781 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表