BZOJ1968 [Ahoi2005]COMMON 约数研究
Posted _rqy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1968 [Ahoi2005]COMMON 约数研究相关的知识,希望对你有一定的参考价值。
Description
Input
只有一行一个整数 N(0 < N < 1000000)。
Output
只有一行输出,为整数M,即f(1)到f(N)的累加和。
Sample Input
3
Sample Output
5
题解
裸线性筛,不过那么写好麻烦的说。。。
自己把线性筛改了改:
我们对于每个$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 约数研究的主要内容,如果未能解决你的问题,请参考以下文章
bzoj1968: [Ahoi2005]COMMON 约数研究
BZOJ 1968: [Ahoi2005]COMMON 约数研究
BZOJ-1968: [Ahoi2005]COMMON 约数研究 (思想)