Algorithm 如何计算这个素数查找算法的T(N)

Algorithm 如何计算这个素数查找算法的T(N),algorithm,big-o,complexity-theory,Algorithm,Big O,Complexity Theory,这个算法可以找到N以下的所有素数 var f=函数(n){ 变量素数=[2];//1 var标志;//1 对于(var i=3;i,内部循环在sqrt(i)下面的所有素数数组上迭代。 因此,你必须计算数组中元素的数量。对于素数数组,你必须使用π(i)的近似值,即i下面的素数 您可以通过x/ln(x)或(更好)通过.More来近似它们 对于分析而言,x/ln(x)将更容易 您总共得到(假设n=2k+1) T(n)=T(n-2)+O(sqrt(n)/(1/2)⋅ln(n))=O(∑i=1,…,k2⋅

这个算法可以找到N以下的所有素数

var f=函数(n){
变量素数=[2];//1
var标志;//1

对于(var i=3;i,内部循环在
sqrt(i)
下面的所有素数数组上迭代。 因此,你必须计算数组中元素的数量。对于素数数组,你必须使用π(i)
的近似值,即
i
下面的素数

您可以通过
x/ln(x)
或(更好)通过.More来近似它们

对于分析而言,
x/ln(x)
将更容易

您总共得到(假设
n=2k+1

T(n)=T(n-2)+O(sqrt(n)/(1/2)⋅ln(n))=O(∑i=1,…,k2⋅sqrt(2)⋅i+1)/ln(2)⋅i+1) 从内部for循环得到递归公式,该公式迭代小于
sqrt(n)
的素数数组(近似为
sqrt(n)/((1/2)⋅ln(n))
),而要达到这一目标,您必须做的工作,由
T(n-2)
表示

也许你可以简化一下。我不想从你身上得到乐趣:)

提示:也许你可以用一个积分来得到和的近似值。但我认为没有“好”的方法来记录它

如果您忘记了
1/ln(i)
-部分,您可以看到
T(n)∈ o(n3/2)
T(n)∈ ω(n)
。也许你可以做得更好


正如@vib所提到的,你可以得到一个更紧的上界
O(n3/2/ln(n))
。但是请注意,
sqrt(n)/ln(n)
只是比
sqrt(n)
低的素数的一个近似值。因此,你可以用更好的近似值得到更好的界。因为这个近似值没有提供
π(n)的精确值
,我们不能说这个算法运行于
Θ(n3/2/ln(n))

显然,这个和是由n*sqrt(n)/ln(n)(它的最大项)上界的,是O(n^{3/2}/ln n)。通过将和限制在n/a的范围内,谢谢,我会把它添加到我的答案中。我遇到的问题是像
O(n^{3/2}/ln n)这样的复杂性
是,很难与其他人相比,因为你被一些东西除了。我试图避免这种情况。谢谢。我不明白你为什么没有(n-2)+sqrt(n)/0.5*ln(n),你能详细解释一下吗?@rahpuser我添加了一个解释,我对总数做了一点更正。总数不正确,但在big-O中,它什么也不会改变。@rahpuser说实话:我从来没有读过一本关于复杂性理论的书。也许你可以在这里从其他问题中学到一些东西。也许你可以在网站上找到一些好的读物我是一些教授的e,但我只知道一些德语作品,它们不是官方出版的。 T(n) = T(n-2) + O(sqrt(n)/( (1/2)⋅ln(n) )) = O( Σi = 1,...,k 2⋅sqrt(2⋅i+1)/ln(2⋅i+1) )