介绍
思想
1 |
|
白话文译文:
(如果需要对分数进行约分,那么)可以折半的话,就折半(也就是用2来约分)。如果不可以折半的话,那么就比较分母和分子的大小,用大数减去小数,互相减来减去,一直到减数与差相等为止,用这个相等的数字来约分。
使用步骤
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2的积与第二步中等数的乘积就是所求的最大公约数。
其中所说的“等数”,就是公约数。求“等数”的办法是“更相减损”法。
实例
例1、用更相减损术求98与63的最大公约数。
解:由于63不是偶数,把98和63以大数减小数,并辗转相减:
98-63=35
63-35=28
35-28=7
28-7=21
21-7=14
14-7=7
所以,98和63的最大公约数等于7。
例2、用更相减损术求260和104的最大公约数。
解:由于260和104均为偶数,首先用2约简得到130和52,再用2约简得到65和26。
此时65是奇数而26不是奇数,故把65和26辗转相减:
65-26=39
39-26=13
26-13=13
所以,260与104的最大公约数等于13乘以第一步中约掉的两个2,即13*2*2=52。
代码实现
//迭代形式
#include<stdio.h>
int main()
{
int n = 0, m = 0;
scanf("%d %d", &n, &m);
while (n != m)
{
if (n > m)
{
n -= m;
}
else
{
m -= n;
}
}
printf("%d", n);
return 0;
}
//递归形式
#include<stdio.h>
int gcd(int n, int m)
{
if (n == m)
{
return n;
}
else if (n > m)
{
n -= m;
}
else
{
m -= n;
}
return gcd(n, m);
}
int main()
{
int n = 0, m = 0;
scanf("%d %d", &n, &m);
printf("%d", gcd(n, m));
return 0;
}