【用法】
求两个整数的最大公约数
【证明】
【代码】
伪代码
function gcd(a, b)
while b ≠ 0
t ← b
b ← a mod b
a ← t
return a
C++
int gcd(int n,int m)
{
return m == 0 ? n : gcd(m, n % m);
}
java
public class MethodOfSuccessiveDivision {
public static void main(String[] args) {
System.out.println(gcd(1071, 462));
}
public static int gcd(int a, int b){
if(b == 0){
return a;
}else{
return gcd(b, a % b );
}
}
}
【随手记】
最近复习的时候忘记原理就复习一下,我的理解是两个数是线段,最后就是找单位长度把他们均分成若干段,有因为是整数,所以最小就是1。
要求:两个数是整数,m>n
m,n两个都当成有限的线段,那就是要在找到一个合适单位长度将其分成若干段
把n当作单位长度,如果刚好把m剪切完,那最大公因数就n
如果不能,至少m-n<n(记作k),那这段合适的长度就在k中找,
如果k刚好能把n切成若干段,这k也一定能把有n为单位长度是切的那几段刚好切完,这样就找到了最大公约数
如果不能就把n当作代剪绳,n-k作为单位长度,继续