任何人都可以告诉我这是如何在O(n)中工作的。
http://www.geeksforgeeks.org/sieve-eratosthenes-0n-time-complexity/
product = await response.Content.ReadAsAsync<Product>();
我认为外循环将运行O(n)时间,并且内部循环将运行O(素数小于N)在素数情况下和O(1)在复合情况下运行。但总体上应该是O(n)* O(素数小于n)。我错过了什么吗?
提前致谢。
答案 0 :(得分:2)
关键思想是在SPF计算中只遇到2和 n 之间的每个整数,因此最内层循环的迭代总数为O(n)。
最内层循环填充SPF数组,表示2和n之间的每个整数的最小素数因子。
实际上,为了计算SPF数组,2和 n 之间的每个整数 k 表示为k = i*prime[j]
,其中prime[j]
是素数数字低于 i 的所有素因子(这由prime[j] <= SPF[i]
条件确保,否则会破坏循环)。这意味着prime[j]
是 k 的最小素数因子。但是这种表示对于每个 k 都是唯一的(即,不会再次遇到相同的 k ,作为另一个k = i2 * prime[j2]
因子分解,因为如果{{1} }不等于prime[j2]
,那么其中一个不会是 k 的最小素因子。因此,在2和 n 之间的每个数字 k 恰好在产品prime[j]
中出现一次,在最里面的循环中计算。