Description:

求 $ \sum_{i=1}^n \phi(i) ,\sum_{i=1}^n \mu(i)$

Hint:

\(n<=10^{10}​\)

Solution:

考虑积性函数 \(f,g,h​\) 及其前缀和 \(F,G,H​\)

其中 \(h=f*g​\)

首先 \(H(x)=\sum_{n=1}^xh(n)\)

\(=\sum_{n=1}^x \sum_{d|n} f(d) g(\frac{n}{d})\)

枚举倍数转枚举因数

\(=\sum_{k=1}^x \sum_{d=1}^{\lfloor \frac{x}{k} \rfloor} f(d) g(k)​\)

$=\sum_{k=1}^x g(k)\sum_{d=1}^{\lfloor \frac{x}{k} \rfloor} f(d) $

\(=\sum_{k=1}^x g(k) F(\lfloor \frac{x}{k} \rfloor)\)

\(=\sum_{k=1}^{x}g(k)F(\lfloor \frac{x}{k} \rfloor)\)

故 \(g(1)F(n)=H(n)-\sum_{d=2}^{n}g(d)F(\lfloor \frac{n}{d} \rfloor)\)

此式是杜教筛的核心式,适用于非线性求一个积性函数的前缀和

只要能快速求出 \(H(n),\sum g(d)\) 就能在$ O(n^{ \frac{2}{3}} ) $ 求出\(F(n)\)

\(\sum_{i=1}^n \phi(i)=\frac{n(n+1)}{2}-\sum_{i=2}^n \phi(\lfloor \frac{n}{i} \rfloor)\)

\(\sum_{i=1}^n \mu(i)=1-\sum_{i=2}^n \mu(\lfloor \frac{n}{i}\rfloor)\)

先筛出线性数据范围内的,再杜教筛

递归求解即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned long long ull;
  5. const int mxn=5e6+5,inf=2147483647;
  6. int T,n,tot;
  7. int p[mxn],vis[mxn];
  8. ll mu[mxn],ph[mxn];
  9. map<int ,ll > smu,sph;
  10. void init()
  11. {
  12. vis[1]=mu[1]=ph[1]=1;
  13. for(int i=2;i<=mxn;++i) {
  14. if(!vis[i]) mu[i]=-1,ph[i]=i-1,p[++tot]=i;
  15. for(int j=1;j<=tot&&p[j]*i<=mxn;++j) {
  16. vis[p[j]*i]=1;
  17. if(i%p[j]) mu[p[j]*i]=-mu[i],ph[p[j]*i]=ph[p[j]]*ph[i];
  18. else {ph[p[j]*i]=ph[i]*p[j];break;}
  19. }
  20. }
  21. for(int i=2;i<=mxn;++i) mu[i]+=mu[i-1],ph[i]+=ph[i-1];
  22. }
  23. ll get_mu(int n)
  24. {
  25. if(n<=mxn) return mu[n];
  26. if(smu[n]) return smu[n]; ll ans=0;
  27. for(int l=2,r;r<inf&&l<=n;l=r+1)
  28. r=n/(n/l),ans+=(r-l+1)*get_mu(n/l);
  29. return smu[n]=1ll-ans;
  30. }
  31. ll get_ph(int n)
  32. {
  33. if(n<=mxn) return ph[n];
  34. if(sph[n]) return sph[n]; ll ans=0;
  35. for(int l=2,r;r<inf&&l<=n;l=r+1) //一定是从2开始
  36. r=n/(n/l),ans+=(r-l+1)*get_ph(n/l);
  37. return sph[n]=(ull)n*(n+1ll)/2-ans;
  38. }
  39. int main()
  40. {
  41. cin>>T; init();
  42. while(T--) {
  43. scanf("%d",&n);
  44. printf("%lld %lld\n",get_ph(n),get_mu(n));
  45. }
  46. return 0;
  47. }

[模板][P3377]杜教筛的更多相关文章

  1. LG4213 【模板】杜教筛(Sum)和 BZOJ4916 神犇和蒟蒻

    P4213 [模板]杜教筛(Sum) 题目描述 给定一个正整数$N(N\le2^{31}-1)$ 求 $$ans_1=\sum_{i=1}^n\varphi(i)$$ $$ans_2=\sum_{i= ...

  2. Luogu 4213 【模板】杜教筛(Sum)

    当作杜教筛的笔记吧. 杜教筛 要求一个积性函数$f(i)$的前缀和,现在这个东西并不是很好算,那么我们考虑让它卷上另外一个积性函数$g(i)$,使$(f * g)$的前缀和变得方便计算,然后再反推出这 ...

  3. luoguP4213 【模板】杜教筛(Sum)杜教筛

    链接 luogu 思路 为了做hdu来学杜教筛. 杜教筛模板题. 卡常数,我加了register居然跑到不到800ms. 太深了. 代码 // luogu-judger-enable-o2 #incl ...

  4. p4213 【模板】杜教筛(Sum)

    传送门 分析 我们知道 $\varphi * 1 = id$ $\mu * 1 = e$ 杜教筛即可 代码 #include<iostream> #include<cstdio> ...

  5. P4213 【模板】杜教筛(Sum)

    \(\color{#0066ff}{题 目 描 述}\) 给定一个正整数\(N(N\le2^{31}-1)\) 求 \(\begin{aligned} ans_1=\sum_{i=1}^n\varph ...

  6. [洛谷P4213]【模板】杜教筛(Sum)

    题目大意:给你$n$,求:$$\sum\limits_{i=1}^n\varphi(i),\sum\limits_{i=1}^n\mu(i)$$最多$10$组数据,$n\leqslant2^{31}- ...

  7. 【模板】杜教筛(Sum)

    传送门 Description 给定一个正整数\(N(N\le2^{31}-1)\) 求 \[ans1=\sum_{i=1}^n \varphi(i)\] \[ans_2=\sum_{i=1}^n \ ...

  8. P4213【模板】杜教筛(Sum)

    思路:杜教筛 提交:\(2\)次 错因:\(\varphi(i)\)的前缀和用\(int\)存的 题解: 对于一类筛积性函数前缀和的问题,杜教筛可以以低于线性的时间复杂度来解决问题. 先要构造\(h= ...

  9. P4213 【模板】杜教筛(Sum)(杜教筛)

    根据狄利克雷卷积的性质,可以在低于线性时间复杂度的情况下,求积性函数前缀和 公式 \[ 求\sum_{i=1}^{n}\mu(i) \] 因为\(\mu*I=\epsilon\) 所以设\(h=\mu ...

随机推荐

  1. Linux系统调用的运行过程【转】

    本文转自:http://blog.csdn.net/kernel_learner/article/details/7331505 在Linux中,系统调用是用户空间访问内核的唯一手段,它们是内核唯一的 ...

  2. ubuntu cron 及 crontab 自动执行任务

    Add the below line (with tweaks) to the end of /etc/crontab: 30 23 * * * root shutdown -h now At 23: ...

  3. scn 时间

    Scn转换成时间: select to_char(scn_to_timestamp(3998591352171),'YYYY-MM-DD HH24:MI:SS') from dual: 时间转换成sc ...

  4. python中对列表的所有操作方法

    列表: names = ['a','b','c','d'] 1.追加:names.append() >>> names.append('e') >>> names ...

  5. myeclipse的web项目导入到eclipse中

    环境组成: java8 eclipse4.4.2 for javaee tomcat 7.0.61 1.导入myeclipse项目 2.设置JDK环境 3.将导入的项目修改为web项目 将myecli ...

  6. Eclipse与github整合

    Eclipse与github整合 Windows系统下: github官方指南:https://help.github.com/articles/set-up-git Git?是个正快速成长的版本控制 ...

  7. js实现页面重定向

    在现行的网站应用中URL重定向的应用有很多: 404页面处理.网址改变(t.sina转到weibo.com).多个网站地址(如:http://www.google.com/ .www.g.cn )等: ...

  8. tsconfig.json配置

    什么工具看什么官网-一般都会有说明的 https://www.tslang.cn/docs/handbook/tsconfig-json.html 概述 如果一个目录下存在一个tsconfig.jso ...

  9. 几个常用的Node方法

    1.写入文件 /** * 写入文件 * @param {string} filePath 文件路径 * @param {string} data 文件内容 * @return {none} */ fu ...

  10. poj1177 矩形周长并

    线段树扫描线的模板题,一个月前写的发现忘了一些还是要看看以前的博客呀! /* 思路:数据小不用离散化处理,线段树叶子结点维护一个区间 */ #include<iostream> #incl ...