标签:代码 static math time line 证明 因子 code 个数
最初,线性筛只是用来筛质数罢了。。。
void sieve(int n) {
static int v[N], p[N], pr;
// v[i] 表示 i 的最小质因子
// p[N] 和 pr 用来存质数表
for (int i = 2; i <= n; ++i) {
if (v[i] == 0) v[i] = i, p[++pr] = i;
// 没被筛,是质数
for (int j = 1; j <= pr && i*p[j] <= n; ++j) {
v[i*p[j]] = p[j];
if (i % p[j] == 0) break;
// 当 i 是 p[j] 的倍数时 break
}
}
}
代码简短,便于记忆。。。
but,为什么复杂度是线性的呢?
然鹅还是没有证明复杂度是线性的。。。
所以,每个数会且仅会被筛一次,故时间复杂度为\(O(n)\)。
标签:代码 static math time line 证明 因子 code 个数
原文地址:https://www.cnblogs.com/yydyz/p/10441165.html