码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ1968 [Ahoi2005]COMMON 约数研究

时间:2017-10-10 14:45:18      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:sample   return   span   images   ima   线性筛   put   input   geo   

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 约数研究

标签:sample   return   span   images   ima   线性筛   put   input   geo   

原文地址:http://www.cnblogs.com/y-clever/p/7645018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!