|
|
1
2
这与@RalphMRickenback所描述的相似,但具有更严格的复杂性界限。 他描述的主要查找算法是 sieve of Erathostenes ,它需要空间O(n),但具有时间复杂性O(n log log n),如果你想对此更加小心,你可能想看看维基百科上的讨论。
找到一个比
编辑
正如评论中提到的,素数扫描的时间复杂度优于线性
这里是Python中的完整实现,而不是伪代码:
在您的示例中,这将产生:
|
|
|
2
2
另一次暴力尝试:
如果有足够的内存可用(N/2位),可以制作一个这样大小的位数组。用除第一个位置以外的所有TRUE初始化它。在位数组上迭代,计算所处位置的倍数,并将所有倍数设置为假。如果下一个位置已经为假,则不需要重新计算其所有倍数,它们已经设置为假。 因此,找到所有素数是<O(N ^2)。
步骤2)是<O(n ^2)以及:
我想这可以进一步优化。你可以保持(i,j)来知道这两个素数。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |