C语言求最大公约数
要想求两个数的最大公约数,建议使用辗转相除法来求最大公约数,那什么是辗转相除法呢?
定理:
辗转相除 ,顾名思义,就是反复的除,最终得到两数的最大公约数。
理论不好理解,那我来举个实例:
18 / 4 = 4 … 2
4 / 2 = 0
就是当被除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 18和 4 的最大公约数2。
#include <stdio.h>
int main()
{
int n = 0; // 被除数
int m = 0; // 除数
int r = 0; // 商
scanf("%d %d",&n,&m);
while (r = n%m) // 第一次while循环: 第二次while循环:n=4,m=2 r=0
{ // 比如这里n=18,m=4,那么r=2 // 不进入循环
n = m; // n = 4
m = r; // m = 2
}
printf("最大公约数为:%d",m); // 因为r=0,根据辗转相除法,此时除数m,就是最大公约数
return 0;
}
代码输出结果: