在1~n中,能被2整除的有n/2个,能被3整除的有n/3个,……
则该算法的复杂度可这样计算:
O(n)=n/2×1+n/3×2+n/5×3+n/7×4+……
//即O(n)~n×φ(n)
考虑到6这个数,它既是2的倍数,也是3倍数,因此还要用到容斥原理。
//设能被第i个素数整除的正整数的集合为Ai。
对于特定的一个整数k,该算法一定是在取得其最小的素因数,或者其本身是个素数时break出第二层循环。
对于6这个例子,我们要把他当有3这个因子的情况去掉。
考虑30,他的质因数有2,3,5,我们需要减去3,5这两种情况。
注:我们在计算(2,3)这一组时,对30减去3这种情况,(2,5)这一组减去5这种情况,(3,5)又减了一次5这种情况,因此要加(2,3,5)这一组的计算结果。只能说类似容斥原理。
不妨设
cnt=φ(n)
Pi为第i个素数
因此由容斥原理可得: