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 约数研究 (思想)

BZOJ 1968 [Ahoi2005]COMMON 约数研究

BZOJ1968AHoi2005COMMON约数研究

[bzoj1968][Ahoi2005]COMMON 约数研究