![]() |
1
10
有一种更快的方法来回答这个问题,使用数论。其他答案包含如何做到这一点的指示。这个答案只是关于一个更好的方法来写
如果您只想替换long条件,可以在for循环中更好地表达它:
变成:
款式不太好,但我想这就是你想要的。 |
![]() |
2
19
可被两个数整除的最小数是 LCM 在这两个数字中。实际上,被一组N个数x1..xN整除的最小数是这些数的LCM。计算两个数字的LCM很容易(请参阅wikipedia文章),您可以利用以下事实扩展到N个数字:
注意:小心溢出。
|
![]() |
3
15
将1到20之间的所有整数分解为素数分解。例如,因子18为18=3^2*2。现在,对于每个素数
例如,让我们找到一个最小的数,它可以被1到4的所有数整除。
出现的素数是
这里是一个相对简单的实现。
样本输出:
|
![]() |
4
4
http://en.wikipedia.org/wiki/Greatest_common_divisor 给定两个数字a和b,你可以计算gcd(a,b),可被这两个数字整除的最小数字是a*b/gcd(a,b)。接下来要做的一件事就是保持一个这样的总数,把你关心的数字一一加进去:你有一个答案到目前为止A,你把下一个数字XII i加起来考虑。 A'=A*X_i/(gcd(A,X_i)) 你可以看到,考虑到你得到的东西,如果你把所有的东西都分解,并把它们写成素数的乘积,这实际上是可行的。这几乎可以让你手工计算出答案。 |
![]() |
5
2
提示:
|
![]() |
6
1
所讨论的数字是数字1到20的最小公倍数。 因为我很懒,让**代表指数运算。让kapow(x,y)表示相对于y的基x的对数的整数部分(例如,卡波(2,8)=3,卡波(2,9)=3,卡波(3,9)=2。 小于或等于20的素数为2、3、5、7、11、13和17。LCM为, 因为sqrt(20)<5,我们知道kapow(i,20)表示i>=5为1。通过检查,LCM为
那是
或
|
![]() |
7
1
|
![]() |
8
1
|
![]() |
9
0
232792560的素因子分解 2^4 3^2 5 7 11 13 17 19 |
![]() |
10
0
|
|
11
0
这是用c写的
} |
|
12
0
向量用于存储最小数的因子。 |
![]() |
13
0
这就是为什么编写这样的函数会让您受益匪浅:
|
![]() |
14
-3
给定最大值
让我们看一看1到20的集合。首先,它包含许多素数,即:
所以,因为它必须除以19,你只能检查19的倍数,因为19是一个素数。然后,你检查它是否能被下面的那个除,等等。如果这个数能被所有的素数成功除,它就可以被1到20的数除。
|
![]() |
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 9 月前 |
![]() |
Alisa Petrova · 在有向图中更改一对顶点以创建循环 9 月前 |
![]() |
Pengcheng · 这个简单的递归函数的输出是什么?你能详细解释一下吗? 10 月前 |
![]() |
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
![]() |
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
![]() |
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |