求最大公约数(辗转相除法)

求最大公约数(辗转相除法)

一个很神奇的算法,假设有两个数,一个数是m = 255,一个是n = 75,找他们两的最大公约数

算法思想

用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止,最后的除数就是这两个数的最大公约数

可能看起来有点绕,实际操作看看

mnm%n(余数)
2557530
753015
30150

所以得到结果他们的最大公约数是15

用C语言实现

#include<stdio.h>
int gcd(int m, int n) {
  int temp;
  while(n) {
    temp = m%n;
    m = n;
    n = temp;
  }
  return m;
}
int main() {
  printf("%d\n", gcd(255, 75));
} 

循环的过程中多了一步,检查到n = 0时,返回m

mnm%n(余数)
2557530
753015
30150
150
点赞