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)\)

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

递归求解即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int mxn=5e6+5,inf=2147483647;
int T,n,tot;
int p[mxn],vis[mxn];
ll mu[mxn],ph[mxn];
map<int ,ll > smu,sph; void init()
{
vis[1]=mu[1]=ph[1]=1;
for(int i=2;i<=mxn;++i) {
if(!vis[i]) mu[i]=-1,ph[i]=i-1,p[++tot]=i;
for(int j=1;j<=tot&&p[j]*i<=mxn;++j) {
vis[p[j]*i]=1;
if(i%p[j]) mu[p[j]*i]=-mu[i],ph[p[j]*i]=ph[p[j]]*ph[i];
else {ph[p[j]*i]=ph[i]*p[j];break;}
}
}
for(int i=2;i<=mxn;++i) mu[i]+=mu[i-1],ph[i]+=ph[i-1];
} ll get_mu(int n)
{
if(n<=mxn) return mu[n];
if(smu[n]) return smu[n]; ll ans=0;
for(int l=2,r;r<inf&&l<=n;l=r+1)
r=n/(n/l),ans+=(r-l+1)*get_mu(n/l);
return smu[n]=1ll-ans;
} ll get_ph(int n)
{
if(n<=mxn) return ph[n];
if(sph[n]) return sph[n]; ll ans=0;
for(int l=2,r;r<inf&&l<=n;l=r+1) //一定是从2开始
r=n/(n/l),ans+=(r-l+1)*get_ph(n/l);
return sph[n]=(ull)n*(n+1ll)/2-ans;
} int main()
{
cin>>T; init();
while(T--) {
scanf("%d",&n);
printf("%lld %lld\n",get_ph(n),get_mu(n));
}
return 0;
}

[模板][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. 无向图最小割Stoer-Wagner算法学习

    无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集,最小割集当然就权和最小的割集. 使用最小切割最大流定理: 1.min=MAXINT,确定一个源点 2.枚举汇点 3.计算最大流,并 ...

  2. igmp组播测试环境搭建

    2.4G无线组播测试环境搭建: (1)组播源: VLC 或者 pixstream (2)无线: 2.4G AP (3)客户端PC: VLC播放器 有线直连 无线2.4G PC(组播源pixstream ...

  3. cacti系列(一)之cacti的安装及配置监控mysql服务

    简介 Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数.它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构 ...

  4. Ex 6_20 最优二叉搜索树..._第六次作业

    假设关键字的总数为n,用c[i,j]表示第i个关键字到第j个关键字的最优二叉查找树的代价,我们的目标是求c[0,n-1].要求c[i,j],首先要从第i个关键字到第j个关键字中选一个出来作为根结点,选 ...

  5. Java的初始化执行顺序(父类static变量->子类static变量->父类成员变量->父类构造器->成员变量->构造器->main函数)

    1. 引言 了解Java初始化的顺序,有助于理解Java的初始化机制和内存机制. 顺序:父类static变量->子类static变量->父类成员变量->父类构造器->成员变量- ...

  6. Java使用google开源工具Thumbnailator实现图片压缩

    <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</ar ...

  7. 深入对比TOML,JSON和YAML

    坦率地说,在我开始与Hugo TOML合作之前,我感到羞耻是一个需要发现的新领域,但我对YAML和JSON非常熟悉.本文将帮助您了解如何通过不同的数据格式构建数据.       在Hugo中,您可以将 ...

  8. 【splunk】数据输入-文件目录 导入失败

    今天用splunk的“数据输入-文件目录”自动监控文件并索引,结果失败了,完全没有出现我要的索引. 解决: 删除文件监控 改为一次性索引 再重新添加连续监控 原因: 尚不明确 https://answ ...

  9. 【docker】资料

    https://yeasy.gitbooks.io/docker_practice/content/network/linking.html

  10. ubuntu git hub 建立仓库

    https://www.cnblogs.com/woider/p/6533709.html 1.安装git apt-get install git 2.配置 Git 用户信息 把用户名和邮箱换成你自己 ...