例如: 20和8的最大公约数是4,那么这是怎么计算的呢
想解开就要了解最大公约数:最大公约数是指能同时被两个数整除的最大的值,而最大的公约数就是这些数中的最大值
那能同时能被20和8整除的数有4,2,1,在这种4是最大的,4就是最大公约数
假设 x=24,y=18,那么最大公约数不会超过y也就是18 那么就以18除以两个数看是否能被整除,如果不能那减一,如此反复直到能够同时整除x(24)和y(18)的值就是最大公约数
结果24和18的最大公约数是6
方法一:
int main() { int x = 0, y = 0; scanf("%d %d", &x, &y); int m = x < y ? x : y; while (1) { if (x% m == 0 && y % m == 0) { printf("%d\n", m); break; } m--; } return 0; }
这就是简单的方法,这种方法效率比较低下
第二种方法也就是 辗转相除法
x % y 的余数看是否等于0,如果不是那么就把x % y的余数放到max中,再把y的值赋给x, max的值赋给y看是否等于0,如果等于0,那么除数y就是最大公约
例如:
int main() { int x = 0, y = 0; scanf("%d %d", &x, &y); int max = 0; while (max = x % y) { x = y; y = max; } printf("%d\n", y); return 0; }
这种方法效率也更高一些
题外扩展
最小公倍数 = x * y /最大公约数
如果觉得有用,给个赞再走呗!