- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
输入两个正整数 m 和 n, 求其最大公约数和最小公倍数 . 1 用辗转相除法求最大公约数 算法描述: m 对 n 求余为 a, 若 a 不等于 0 则 m - n, n - a, 继续求余 否则 n 为最大公约数
2 最小公倍数 = 两个数的积 / 最大公约数
#include int main()
{
int m, n; int m_cup, n_cup, res; /* 被除数, 除数, 余数*/ printf(Enter two integer:\n);
scanf(%d %d, m, n); if (m 0 n 0)
{
m_cup = m; n_cup = n;
res = m_cup % n_cup; while (res != 0)
{
m_cup = n_cup; n_cup = res;
res = m_cup % n_cup;
}
printf(Greatest common divisor: %d\n, n_cup); printf(Lease common multiple : %d\n, m * n / n_cup);
}
else printf(Error!\n); return 0;
}
★ 关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下: 约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。 以等数约之。” 其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。 辗转相除法求最大公约数,是一种比较好的方法,比较快。 对于 52317 和 75569 两个数,你能迅速地求出它们的最大公约数吗?一般来说你会找一找公共的使因子,这题可麻烦了, 不好找,质因子大。 现在教你用辗转相除法来求最大公约 数。 先用较大的 75569 除以 52317 ,得商 1,余数 23252 , 再以 52317 除以 23252,得商 2,余数是 5813 ,再用 23252 做被除数,5813 做除数,正好除尽得商数 4。这样 5813 就是 75569 和 52317 的最大公约数。你要是用分解使因数的办法,肯定找不到。 那么,这辗转相除法为什么能得到最大 公约数呢?下面我就给大伙谈谈。 比如说有要求 a、b 两个整数的最大公约数,a>b,那么我们先用 a 除以 b,得到商 8, 余数 r1:a÷b=q1…r1 我们当然也可以把上面这个式子改写成乘法式:a=bq1+r1------l) 如果r1=0,那么b 就是 a、b
的最大公约数 3。要是 r1≠0,就继续除,用 b 除以r1,我们也可以有和上面一样的式子: b=r1q2+r2-------2 ) 如果余数 r2=0,那么 r1 就是所求的最大公约数 3。为什么呢?因为如果 2)式变成了 b=r1q2,那么 b1r1 的公约数就一定是a1b 的公约数。这是因为一个数能同时除尽 b 和 r1,那么由l)式,就一定能整除 a,从而也是 a1b 的公约数。 反过来, 如果一个数 d,能同时整除 a1b,那么由 1)式,也一定能整除 r1,从而也有 d 是 b1r1 的公约数。 这样,a 和 b 的公约数与 b 和r1 的公约数完全一样,那么这两对的最大公约数也一定相同。那 b1r1 的最大公约数,在 r1=0 时,不就是 r1 吗?所以 a 和 b 的最大公约数也是 r1 了。 有人会说,那 r2 不等于 0 怎么办?那当然是继续往下做,用r1 除以 r2,…… 直到余数为零为止。 在这种方法里,先做除数的,后一步 就成了被除数,这就是辗转相除法名字的来历吧。
文档评论(0)