之前回答过这么一道题: 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). $$
有任何错误欢迎指出。。。/* 反正也没人看 */