
标签:sample return span images ima 线性筛 put input geo
裸线性筛,不过那么写好麻烦的说。。。
自己把线性筛改了改:
我们对于每个$n$,若其最小质因子是$p_0$,我们用$n$来更新所有$n*p^k$,其中$p < p_0$;$n=p_0$时我们筛掉所有$p_0^k$。可以发现这样筛,每个数也只会被筛一次。
这样的话算什么因子数、因数和似乎会简单一点。
#include <cstdio> typedef long long LL; const int N = 1000050; int prime[N], f[N]; int main() { int n, cnt = 0; scanf("%d", &n); LL ans = 1; for (int i = 2; i <= n; ++i) { if (!f[i]) { prime[cnt++] = i; for (LL j = 1, k = i; k <= n; ++j, k *= i) f[k] = j + 1; } ans += f[i]; for (int j = 0; j < cnt && (LL)i * prime[j] <= n; ++j) if (i % prime[j]) for (LL l = 1, k = prime[j]; i * k <= n; ++l, k *= prime[j]) f[i * k] = f[i] * f[k]; } printf("%lld\n", ans); return 0; }
BZOJ1968 [Ahoi2005]COMMON 约数研究
标签:sample return span images ima 线性筛 put input geo
原文地址:http://www.cnblogs.com/y-clever/p/7645018.html