PTA-C理论B类题库6-3使用函数求最大公约数(辗转相除法的实现)

非首发非搬运,本人才疏学浅,如有不足欢迎指正!

非首发非搬运,本人才疏学浅,如有不足欢迎指正!

非首发非搬运,本人才疏学浅,如有不足欢迎指正!


题目作者:张高燕 单位:浙大城市学院

本题要求实现一个计算两个数的最大公约数的简单函数。

函数接口定义:

其中xy是两个正整数,函数gcd应返回这两个数的最大公约数。

裁判测试程序样例:

输入样例:

输出样例:

感谢集美大学蓝华斌同学修正测试数据!

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB


代码实现原理:

辗转相除法(欧几里得算法)

1.定义:

所谓辗转相除法,就是对于给定的两个数,用较大的数除以较小的数。

若余数不为零,则将余数和较小的数构成新的一对数,继续上面的除法,直到大数被小数除尽,

即余数为零,则这时较小的数就是原来两个数的最大公约数。

2.步骤:

(以求8251和6105的最大公约数的过程为例)

第一步用两数中较大的数除以较小的数,求得商和余数8251=6105×1+2146

结论:8251和6105的公约数就是6105和2146的公约数,求8251和6105的最大公约数,只要求出

6105和2146的公约数就可以了。

第二步对6105和2146重复第一步的做法6105=2146×2+1813,同理,6105和2146的最大公约数也

是2146和1813的最大公约数。

完整的过程:8251=6105×1+2146,6105=2146×2+1813,2146=1813×1+333......

例:用辗转相除法求225和135的最大公约数。

225=135×1+90,135=90×1+45,90=45×2。

显然45是90和45的最大公约数,也就是225和135的最大公约数。

(搬运整理自:zhaodw126)


话不多说,上代码。

有注释版:

无注释版(做PTA请复制这块代码):


原创不易,转载请标明出处,如有错误欢迎指正!

原创不易,转载请标明出处,如有错误欢迎指正!

原创不易,转载请标明出处,如有错误欢迎指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值