1. 最大公约数
给定两个整数,求这两个数的最大公约数
暴力求解:
从较小的那个数开始,依次递减,直到某个数能够同时被整除
//暴力求解
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int i = 0;int min = a > b ? b : a;for (i = min; i >= 0; i--){if (a % i == 0 && b % i == 0)break;}printf("%d\n", i);return 0;
}
辗转相除法:
将两个数做余,如果余数不为0,将第二个数赋给第一个数,将余数赋给第二个数,继续取余,直到余数为0,此时第二个数就是最大公约数
//辗转相除法
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int val = 0;while (val = a % b){a = b;b = val;}printf("%d\n", b);return 0;
}
2.最小公倍数
假设两个整数a和b,这两个数的最大公约数为z
最小公倍数 = ( a * b ) / z
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);//计算最大公约数int val = 0;int x = a;int y = b;while (val = x % y){x = y;y = val;}//最小公倍数 = (a*b)/最大公约数printf("%d\n", (a * b) / y);return 0;
}
val;}//最小公倍数 = (a*b)/最大公约数printf("%d\n", (a * b) / y);return 0;
}