之前回答过这么一道题: https://segmentfault.com/q/10...

提问者问到,

nth-child 的值可以是包含 n 的线性公式,也可以是 odd 和 even 表示奇数行和偶数行. 然而素数本身是没有规律的, 请问怎么实现素数行和合数行分别设置不同的背景色?

现在假设我们已知有不大于 N 个元素需要匹配,求选择器长度的复杂性。

这是我当时的答案:

tr{background:#fff;}
tr:nth-of-type(1){background:#eee} /* 1 is neither a prime nor a composite number. */
tr:nth-of-type(2n+4),tr:nth-of-type(3n+6),tr:nth-of-type(5n+10){background:#eaa}

JSFiddle: https://jsfiddle.net/qdzruq16/3/

其中最后一行选择器为所有 tr:nth-of-type(pn+2p), 其中 p 为不大于
$$ sqrt{N} $$ 的所有质数。

现在设函数
$$ pi(n) $$ 表示不大于 n 的质数个数

容易看出,对于 N 个元素,采用这种方法匹配所有质数所需的选择器的个数至少为
$$ 2+pi(sqrt{N}), $$

也就是
$$ O(pi(sqrt{N})) $$ 的复杂性。

然而我们在算法课上貌似没学过这样的式子。 Don’t worry. 根据质数定理 https://en.wikipedia.org/wiki... 我们可以把它变成更加熟悉的形式。

质数分布的渐近定律是这样说的,
$$ lim_{xtoinfty}frac{pi(x)}{x/log(x)}=1 $$

i.e.,
$$ pi(x)simfrac{x}{log x}. $$

把上式代入可以得到我们的选择器长度复杂度为
$$ O(sqrt{N}/log sqrt{N}), $$

由于
$$ log sqrt{N}=frac{1}{2}log N, $$

故我们化简后的选择器长度复杂性为:

$$ O(sqrt{N}/log N). $$

有任何错误欢迎指出。。。/* 反正也没人看 */


_CRY
1.2k 声望24 粉丝

How dare we sit quietly