问题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"是如何工作的。能否有人帮助我理解其逻辑呢?(我知道它返回两个数字的最大公约数,但为什么需要那么多操作呢?)
a
和b
,但写起来更容易:`int gcd(int x, int y) { int r; if (x <= 0 || y <= 0) return(0); while ((r = x % y) != 0) { x = y; y = r; } return(y); }` 是的,它使用了一个局部变量,而你找到的代码没有使用,但这并不是一个显著的代价。我注意到至少还有两个关于欧拉计划5的问题(Euler Project 5 和 Euler Project 5)。 - Jonathan Leffler