![]() |
1
12
答案根本不需要在因式分解或素数方面有任何花哨的步法,当然也不需要埃拉托色尼的筛子。 相反,你应该通过使用欧几里德算法计算GCD来计算单对的LCM(该算法不需要因子分解,事实上速度要快得多):
那么你可以使用上面的LCM()函数通过减少数组来找到总LCM:
|
![]() |
2
19
这个问题很有趣,因为它不需要你找到任意一组数字的LCM,而是给你一个连续的范围。您可以使用 Sieve of Eratosthenes 找到答案。
编辑:最近的一次投票让我重新审视了这个已经超过3年的答案。我的第一个观察是,我今天会写得有点不同,使用
enumerate
例如。为了使其与Python 3兼容,需要进行一些小的更改。
第二个观察结果是,该算法仅在范围的开始为2或更小时有效,因为它不会试图筛选出范围开始以下的共同因素。例如,RangeLCM(10,12)返回1320,而不是正确的660。 第三个观察结果是,没有人试图将这个答案与其他答案进行比较。我的直觉告诉我,随着范围的扩大,这将比暴力LCM解决方案有所改善。测试证明我的直觉是正确的,至少这次是这样。
由于该算法不适用于任意范围,我重写了它,假设范围从1开始。我取消了对
以下是与原始和提出的解决方案的时间比较
Joe Bebel
这被称为
对于问题中给出的1到20的范围,欧几里得的算法击败了我的新旧答案。对于1到100的范围,你可以看到基于筛选的算法领先,尤其是优化版本。 |
![]() |
3
10
只要范围在1到N之间,就有一个快速的解决方案。
关键的观察结果是,如果
例如,对于20,我们有
将所有这些素数相乘,我们得到所需的结果
所以在伪代码中:
现在,您可以调整内环,使其工作方式略有不同,以获得更高的速度,并且可以预先计算
编辑: 由于最近的一次投票,我决定重新审视这个问题,看看与其他列出的算法的速度比较如何。 针对Joe Beibers和Mark Ransoms的方法,1-160范围内10k迭代的时间如下: 慢跑:1.85秒 标记:3.26秒 地雷:0.33秒 这是一个对数图,结果高达300。
我的测试代码可以在这里找到:
|
![]() |
4
5
Haskell中的一行代码。
这是我在Project Euler Problem 5中使用的。 |
![]() |
5
3
在Haskell中:
你可以传递一个列表,例如:
|
![]() |
6
2
一个或多个数的LCM是所有数中所有不同素数因子的乘积,每个素数都是该素数在其LCM中出现的所有幂的最大幂的幂。 比如说900=2^3*3^2*5^2,26460=2^2*3^3*5^1*7^2。 2的最大功率是3,3的最大功率为3,5的最大功率也是1,7的最大功率就是2,任何更高素数的最大功率都是0。 因此,LCM为:264600=2^3*3^3*5^2*7^2。 |
![]() |
7
2
|
![]() |
8
1
Haskell中的一种算法。这是我现在思考算法思维的语言。这可能看起来奇怪、复杂、不讨人喜欢——欢迎来到Haskell!
|
![]() |
9
0
以下是我的Python尝试:
第一步得到一个数字的素数。第二步构建一个哈希表,记录每个因子被看到的最大次数,然后将它们相乘。 |
![]() |
10
0
这可能是我迄今为止看到的最干净、最短的答案(无论是从代码行数来看)。
|
![]() |
11
0
这是我在JavaScript中的答案。我首先从素数开始处理这个问题,并开发了一个很好的可重用代码函数来查找素数和素数因子,但最终决定这种方法更简单。 我的答案中没有任何独特之处没有在上面发布,它只是用Javascript编写的,我没有具体看到。
|
![]() |
12
0
这是我的javascript解决方案,我希望你会发现它很容易遵循:
|
![]() |
13
0
这是使用C Lang的解决方案
|
![]() |
14
-1
在扩展@Alexander的评论时,我想指出,如果你能将数字分解为素数,删除重复项,然后相乘,你就会得到答案。 例如,1-5的素数为2,3,2,2,5。从“4”的因子列表中删除重复的“2”,得到2,2,3,5。将它们相乘得到60,这就是你的答案。 在前面的评论中提供的Wolfram链接, http://mathworld.wolfram.com/LeastCommonMultiple.html 采用了一种更正式的方法,但简短的版本在上面。 干杯。 |
![]() |
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 7 月前 |
![]() |
Alisa Petrova · 在有向图中更改一对顶点以创建循环 7 月前 |
![]() |
b39b332d · 使用C++标准库实现高效间隔存储 12 月前 |
![]() |
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
![]() |
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |