【BZOJ3512】DZY Loves Math IV(杜教筛)

题面

BZOJ

\[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)
\]

其中\(n\le 10^5,m\le 10^9\)。

题解

这个数据范围很有意思。

\(n\)的值足够小,所以我们可以直接暴力枚举\(n\)。

那么所求:

\[S(n,m)=\sum_{i=1}^m\varphi(ni)
\]

考虑如何将\(\varphi\)给拆开,因为\(\varphi\)只有每个质因子第一次出现的时候才会特殊计算,其他时候都直接乘起来,因此,假设\(\displaystyle n=\prod p_i^{a_i}\),那么令\(\displaystyle p=\prod p_i^{a_i-1}\),\(\displaystyle q=\prod p_i\),\(pq=n\)

所以有:

\[\begin{aligned}
S(n,m)&=p\sum_{i=1}^m\varphi(qi)\\
&=p\sum_{i=1}^m \varphi(q)\varphi(\frac{i}{gcd(i,q)})gcd(i,q)\\
&=p\sum_{i=1}^m \varphi(\frac{q}{gcd(i,q)})\varphi(i)gcd(i,q)\\
&=p\sum_{i=1}^m \varphi(\frac{q}{gcd(i,q)})\varphi(i)\sum_{d|gcd(i,q)}\varphi(d)\\
&=p\sum_{i=1}^m \varphi(i)\sum_{d|i,d|q}\varphi(\frac{q}{d})\\
&=p\sum_{d|q}\varphi(\frac{q}{d})\sum_{i=1}^{m/d} \varphi(id)\\
&=p\sum_{d|q}\varphi(\frac{q}{d})S(d,[\frac{m}{d}])\\
\end{aligned}\]

那么就可以递归处理啦?

至于复杂度?不会证啦QwQ。

#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define MOD 1000000007
#define MAX 2000000
int n,m,ans;
int pri[MAX],tot,phi[MAX],mn[MAX];
bool zs[MAX];
void pre(int n)
{
phi[1]=1;
for(int i=2;i<=n;++i)
{
if(!zs[i])pri[++tot]=i,phi[i]=i-1,mn[i]=i;
for(int j=1;i*pri[j]<=n&&j<=tot;++j)
{
zs[i*pri[j]]=true;mn[i*pri[j]]=pri[j];
if(i%pri[j])phi[i*pri[j]]=phi[i]*phi[pri[j]];
else{phi[i*pri[j]]=phi[i]*pri[j];break;}
}
}
for(int i=1;i<=n;++i)phi[i]=(phi[i-1]+phi[i])%MOD;
}
map<int,int> M,S[100010];
int Phi(int n)
{
if(n<MAX)return phi[n];
if(M[n])return M[n];
int ret=1ll*n*(n+1)/2%MOD;
for(int i=2,j;i<=n;i=j+1)
{
j=n/(n/i);
ret=(ret+MOD-1ll*(j-i+1)*Phi(n/i)%MOD)%MOD;
}
return M[n]=ret;
}
int Solve(int n,int m)
{
if(!m)return 0;
if(n==1)return Phi(m);
if(m==1)return (Phi(n)-Phi(n-1)+MOD)%MOD;
if(S[n][m])return S[n][m];
int ret=0;
vector<int> fac;int p=1,q=1,N=n;
while(N>1)
{
int x=mn[N];q*=x;N/=x;fac.push_back(x);
while(N%x==0)p*=x,N/=x;
}
for(int i=0,l=fac.size();i<1<<l;++i)
{
int d=1;
for(int j=0;j<l;++j)if(i&(1<<j))d*=fac[j];
ret=(ret+1ll*(Phi(q/d)-Phi(q/d-1)+MOD)*Solve(d,m/d))%MOD;
}
return S[n][m]=1ll*ret*p%MOD;
}
int main()
{
scanf("%d%d",&n,&m);pre(MAX);
for(int i=1;i<=n;++i)ans=(ans+Solve(i,m))%MOD;
printf("%d\n",ans);
return 0;
}

【BZOJ3512】DZY Loves Math IV(杜教筛)的更多相关文章

  1. BZOJ 3512: DZY Loves Math IV [杜教筛]

    3512: DZY Loves Math IV 题意:求\(\sum_{i=1}^n \sum_{j=1}^m \varphi(ij)\),\(n \le 10^5, m \le 10^9\) n较小 ...

  2. 【bzoj3512】DZY Loves Math IV 杜教筛+记忆化搜索+欧拉函数

    Description 给定n,m,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}\varphi(ij)\)模10^9+7的值. Input 仅一行,两个整数n,m. Output 仅 ...

  3. BZOJ3512 DZY Loves Math IV(杜教筛+线性筛)

    注意到n很小,考虑枚举i.现在要求的是f(n,m)=Σφ(in) (i=1~m).显然当n没有平方因子时,φ(in)=φ(i)·φ(n/gcd(i,n))·gcd(i,n).利用φ*1=id又可得φ( ...

  4. BZOJ3512 DZY Loves Math IV

    解:这又是什么神仙毒瘤题...... 我直接把后面那个phi用phi * I = id反演一波,得到个式子,然后推不动了...... 实际上第一步我就大错特错了.考虑到n很小,我们有 然后计算S,我们 ...

  5. bzoj 3512: DZY Loves Math IV【欧拉函数+莫比乌斯函数+杜教筛】

    参考:http://blog.csdn.net/wzf_2000/article/details/54630931 有这样一个显然的结论:当\( |\mu(n)|==1 \)时,\( \phi(nk) ...

  6. 【BZOJ3309】DZY Loves Math 莫比乌斯反演+线性筛(好题)

    [BZOJ3309]DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10 ...

  7. ●BZOJ 3512 DZY Loves Math IV

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3512 题解: $$求ANS=\sum_{i=1}^{N}\sum_{j=1}^{M}\phi ...

  8. 【刷题】BZOJ 3512 DZY Loves Math IV

    Description 给定n,m,求 模10^9+7的值. Input 仅一行,两个整数n,m. Output 仅一行答案. Sample Input 100000 1000000000 Sampl ...

  9. bzoj 3512: DZY Loves Math IV

    Description 给定n,m,求 模10^9+7的值. Solution 设 \(S(n,m)\) 表示 \(\sum_{i=1}^{m}\phi(n*i)\) \(Ans=\sum_{i=1} ...

随机推荐

  1. Docker(五):Docker 三剑客之 Docker Machine

    上篇文章Docker(四):Docker 三剑客之 Docker Compose介绍了 Docker Compose,这篇文章我们来了解 Docker Machine . Docker Machine ...

  2. Kafka基础系列第1讲:Kafka的诞生背景及应用

    Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如 Cloudera.Apache Sto ...

  3. JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

    测试又报bug啦 接到测试小伙伴的问题,说是一个接口不返回数据了,好吧,虽然不是我写的接口任务落到头上也得解决,本地调试了一下,好家伙,直接抛了个异常出来,这又是哪位大哥喝醉了写的代码... Exce ...

  4. YY:2018互联网创业公司应看清的事情

    潮流,技术,生活方式,盈利模式,消费人群几乎每年都在改变,2018,你看到的是怎样的一盘棋. 2018年是个很好的数字,很多互联网公司寄予希望在这个幸运数字年头奋起一搏,拿到一份可观的酬金.特别是一些 ...

  5. ssh实现办公室电脑连接家中的电脑

    友情提示:如果您不知道您家路由器管理页面的密码,请您忽略此文. 问题背景: 家中有台笔记本电脑,它是通过家中的路由器与外界联网的,这时,我想通过ssh服务让公司的电脑能连上我家中的笔记本. 可以画个图 ...

  6. 分布式监控系统Zabbix3.4-钉钉告警配置记录

    群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步.例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步:通过聚合Trello,JIR ...

  7. Linux系统下本地yum镜像源环境部署-完整记录

    之前介绍了Linux环境下本地yum源配置方法,不过这个是最简单最基础的配置,在yum安装的时候可能有些软件包不够齐全,下面说下完整yun镜像源系统环境部署记录(yum源更新脚本下载地址:https: ...

  8. PHP预防跨站脚本(XSS)攻击且不影响html代码显示效果

    什么是XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往 ...

  9. activiti 选人的实现

    activiti默认是不带有选人的功能的,它默认的是在调用complete 方法的时候自动根据下一个节点的 assignee属性或者candidate属性 设置下一节点的候选人或者 assginee. ...

  10. Windows 安装 docker 以及1709的简单使用

    PS C:\> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force PS C:\> Install-P ...