gpt4 book ai didi

algorithm - 打印出 N 以下所有素数的运行时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:40:16 26 4
gpt4 key购买 nike

int main() {
int i, a[N];
// initialize the array
for(i = 2; i < N; i++) a[i] = 1;
for(i = 2; i < N; i++)
if(a[i])
for(int j = i; j*i < N; j++) a[i*j] =0;
// pirnt the primes less then N
for(i = 2; i < N; i++)
if(a[i]) cout << " " << i;
cout << endl;
}

算法书中给出了我正在阅读的上述程序的运行时间与 N+N/2+N/3+N/5+N/7+N/11+... 成正比

请帮助我理解作者是如何从程序中得出上述等式的。谢谢!文卡塔

最佳答案

这是寻找素数的“Eratosthenes 筛法”方法。对于每个素数,if(a[i])测试成功并执行内部循环。考虑这个内部循环如何在每一步终止(记住,条件是 j*i < N ,或者等价地, j < N/i ):

  • i = 2 -> j = 2, 3, 4, ..., N/2
  • i = 3 -> j = 3, 4, 5, ..., N/3
  • i = 4 -> 不是素数
  • i = 5 -> j = 5, 6, 7, ..., N/5
  • ...

将操作总数(包括初始化数组/提取素数)相加得到书中提到的运行时间。

参见 this question有关更多信息,包括根据 Wikipedia article 讨论如何根据位运算将 O(n(log n)(log log n)) 扩展为 O(n(log n)(log log n)) .

关于algorithm - 打印出 N 以下所有素数的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4059534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com