根据狄利克雷卷积的性质,可以在低于线性时间复杂度的情况下,求积性函数前缀和
#### 公式
$$
求\sum_{i=1}^{n}\mu(i)
$$

因为\(\mu*I=\epsilon\)

所以设\(h=\mu*I,S_n=\sum_{i=1}^n\mu(i)\)

\[\sum_{i=1}^{n}h(i)\]

\[=\sum_{i=1}^{n}\sum_{d|i}\mu(\lfloor\frac{i}{d}\rfloor)\times I(d)
\]

\[=\sum_{i=1}^nI(i)\sum_{j=1}^{\lfloor \frac{n}{i}\rfloor}\mu(j)
\]

\[=\sum_{i=1}^nI(i)\times S(\lfloor\frac{n}{i}\rfloor)
\]

\[=I(1)\times S(n)+\sum_{i=2}^nI(i)\times S(\lfloor\frac{n}{i}\rfloor)\]

\[I(1)\times S(n)=\sum_{i=1}^{n}h(i)-\sum_{i=2}^{n}S(\lfloor\frac{n}{i}\rfloor)
\]

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

\[求\sum_{i=1}^n\phi(i)
\]

因为\(\phi*I=id\)

所以设\(h=\phi*I,S_n=\sum_{i=1}^n\phi_i\)

\[\sum_{i=1}^nh(i)$$$$=\sum_{i=1}^n\sum_{d|i}\phi(\lfloor\frac{i}{d}\rfloor)\times I(d)$$$$=\sum_{i=1}^nI(i)\times \sum_{d|i}\phi(\lfloor\frac{i}{d}\rfloor)$$$$=\sum_{i=1}^nI(i)\times \sum_{t=1}^{\lfloor\frac{n}{i}\rfloor}\phi(t)$$\]

=\sum_{i=1}^nI(i)\times S(\lfloor\frac{n}{i}\rfloor)$$$$

=I(1)\times S(n)+\sum_{i=2}^n I(i)\times S(\lfloor\frac{n}{i}\rfloor)

\[\]

S(n)=\sum_{i=1}nh(i)-\sum_{i=2}n I(i)\times S(\lfloor\frac{n}{i}\rfloor)

\[\]

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

\[#### 注意事项
- 尽量减少常数
- 开头线性筛预处理的时候尽量开到$n^{\frac{2}{3}}$或更大
- long long和int要区别
- 枚举2 TO N 可以整除分块
#### 代码
```cpp
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int MAXN = 5000000;
unordered_map<int,long long> Sumphi;
unordered_map<int,long long> Summu;
int iprime[MAXN+5],cnt;
long long mu[MAXN+5],phi[MAXN+5];
bool isprime[MAXN+5];
void prime(int n){
isprime[1]=true;
mu[1]=1;
phi[1]=1;
for(int i=2;i<=n;i++){
if(!isprime[i])
iprime[++cnt]=i,phi[i]=i-1,mu[i]=-1;
for(int j=1;j<=cnt&&iprime[j]*i<=n;j++){
isprime[iprime[j]*i]=true;
mu[iprime[j]*i]=-mu[i];
phi[iprime[j]*i]=phi[i]*(iprime[j]-1);
if(i%iprime[j]==0){
mu[iprime[j]*i]=0;
phi[iprime[j]*i]=phi[i]*(iprime[j]);
break;
}
}
}
for(int i=1;i<=n;i++){
mu[i]+=mu[i-1];
phi[i]+=phi[i-1];
}
}
long long djsmu(int n){//first mu second phi
if(n<=MAXN)
return mu[n];
if(Summu.count(n))
return Summu[n];
int mid1=0;
for(int i=2,j;i<=n;i=j+1){
j=min(n/(n/i),n);
mid1+=(j-i+1)*djsmu(n/i);
}
Summu[n]=1-mid1;
return Summu[n];
}
long long djsphi(int n){//first mu second phi
if(n<=MAXN)
return phi[n];
if(Sumphi.count(n))
return Sumphi[n];
long long mid1=0;
for(int i=2,j;i<=n;i=j+1){
j=min(n/(n/i),n);
mid1+=(j-i+1)*djsphi(n/i);
}
Sumphi[n]=1LL*(n+1)*n/2-mid1;
return Sumphi[n];
}
int main(){
prime(MAXN);
int T,n;
scanf("%d",&T);
for(int i=1;i<=T;i++){
scanf("%d",&n);
printf("%lld %d\n",djsphi(n),djsmu(n));
}
return 0;
}
```\]

P4213 【模板】杜教筛(Sum)(杜教筛)的更多相关文章

  1. [BZOJ3944]Sum(杜教筛)

    3944: Sum Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6201  Solved: 1606[Submit][Status][Discuss ...

  2. 【知识总结】线性筛_杜教筛_Min25筛

    首先感谢又强又嘴又可爱脸还筋道的国家集训队(Upd: WC2019 进候选队,CTS2019 不幸 rk6 退队)神仙瓜 ( jumpmelon ) 给我讲解这三种筛法~~ 由于博主的鸽子属性,这篇博 ...

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

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

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

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

  5. [bzoj3944] sum [杜教筛模板]

    题面: 传送门 就是让你求$ \varphi\left(i\right) $以及$ \mu\left(i\right) $的前缀和 思路: 就是杜教筛的模板 我们把套路公式拿出来: $ g\left( ...

  6. 洛谷P4213 Sum(杜教筛)

    题目描述 给定一个正整数N(N\le2^{31}-1)N(N≤231−1) 求ans_1=\sum_{i=1}^n\phi(i),ans_2=\sum_{i=1}^n \mu(i)ans1​=∑i=1 ...

  7. P4213 【模板】杜教筛(杜教筛)题解

    题意: 求\(\sum_{i=1}^n\varphi(i)\)和\(\sum_{i=1}^n\mu(i)\) 思路: 由性质可知:\(\mu*I=\epsilon,\varphi*I=id\)那么可得 ...

  8. 3944: Sum[杜教筛]

    3944: Sum Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3471  Solved: 946[Submit][Status][Discuss] ...

  9. 【Bzoj3944】杜教筛模板(狄利克雷卷积搞杜教筛)

    题目链接 哇杜教筛超炫的 有没有见过$O(n^\frac{2}{3})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤 首先我们来看狄利克雷卷积是什么 首先我们把定义域是整数,陪域是复数的函数叫做数论函数. ...

  10. bzoj 3944 Sum —— 杜教筛

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3944 杜教筛入门题! 看博客:https://www.cnblogs.com/zjp-sha ...

随机推荐

  1. uva 10369 Arctic Network

    题意: 有许多基地,每个基地都有两种收发信号的方式,一种是通过无线电收发机,另一种是通过卫星.两个基地之间可以通过卫星交流不管它们相距多远:但是通过无线电交流,就要求它们的距离不超过D.为了方便布置, ...

  2. redis 缓存刷新

  3. 直流-直流(DC-DC)变换电路_BUCK&BOOST变换电路

    1. 直流—直流变换器通过对电力电子器件的通断控制,将直流电压断续地加到负载上,通过改变占空比改变输出电压平均值. BUCK线路原理图如上,其中Q管/MOS作为开关管,驱动电压一般为PWM. 当开关管 ...

  4. ad 原件布局布线基本规则

    一.原件布局基本规则 1.按照电路模块进行布局,电路中的元件应该采用集中就近原则,同时数字电路和模拟电路分开: 2.定位孔.标准孔等周围1.27mm内不得贴元器件,安装孔周围3.5mm不得特装元件 3 ...

  5. android排除报很多错方法 Execution failed for task ':app:compileDebugJavaWithJavac' in Android Studio

    android排除报很多错方法1.回撤对应layout的xml改动2.回撤对应java的改动3.重命名文件后导致的资源不对应 Execution failed for task ':app:compi ...

  6. 开始Nginx的SSL模块

    nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/n ...

  7. node.js基本使用

    1.引入http模块(node的核心模块) const http = require("http"); 2.createServer来创建服务器 http.createServer ...

  8. java321 面向对象编程

  9. django 数据库html显示

    template {% autoescape off %} {% for each in obj %} <h2>{{ each.food }}</h2> <br/> ...

  10. Prometheus监控学习笔记之解读prometheus监控kubernetes的配置文件

    0x00 概述 Prometheus 是一个开源和社区驱动的监控&报警&时序数据库的项目.来源于谷歌BorgMon项目.现在最常见的Kubernetes容器管理系统中,通常会搭配Pro ...