Q 1. 问题5(整除)我尝试了蛮力方法但需要时间,所以我参考了几个站点并找到了这段代码:
#include<stdio.h>
int gcd(int a, int b)
{
while (b != 0)
{
a %= b;
a ^= b;
b ^= a;
a ^= b;
}
return a;
}
int lcm(int a, int b)
{
return a / gcd(a, b) * b;
}
int main()
{
int res = 1;
int i;
for (i = 2; i <= 20; i++)
{
res = lcm(res, i);
}
printf("%d\n", res);
return 0;
}
这很简单,但我不明白函数“gcd”是如何工作的;有人可以帮我理解逻辑。(我知道它返回 2 个数字的 GCD,但为什么有这么多操作?)