【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. 计算2个时间之间经过多少Ticks

    Ticks是一个周期,存储的是一百纳秒,换算为秒,一千万分之一秒.我们需要计算2个时间之间,经过多少Ticks,可以使用下面的方法来实现,使用2个时间相减. 得到结果为正数,是使用较晚的时间减去较早的 ...

  2. 51Nod 1443 路径和树

    还是一道很简单的基础题,就是一个最短路径树的类型题目 我们首先可以发现这棵树必定满足从1出发到其它点的距离都是原图中的最短路 换句话说,这棵树上的每一条边都是原图从1出发到其它点的最短路上的边 那么直 ...

  3. C#断点续传下载。

    断点续传 最近在优化之前的下载流程,仅此篇幅留作笔记之用,日后其他研究此类问题的伙伴可以马上了解原理和开发,减少开发成本. 原理:断点续传目前比较通用的是使用HTTP续传方式,相关的资料可以通过访问: ...

  4. C#大型电商项目优化(三)——扩展性与支付

    上一篇文章引来不少非议,笔者并非对EF有看法,而是针对不同的业务场景和框架背景,挑选不同的方案.每个方案都有其优势劣势,挑选最快速,最简单的方案,是笔者的初衷. 看评论也是学习的过程,然而有些只做评价 ...

  5. Webpack 2 视频教程 005 - Webpack 编译输出日志

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  6. 分布式监控系统Zabbix--完整安装记录 -添加web页面监控

    通过zabbix做web监控,不仅仅可以监控到站点的响应时间,还可以根据站点返回的状态码或响应时间做报警设置,比如说对某个url进行监控,当访问返回的状态码是非200状态时都报警(创建触发器即可).下 ...

  7. nginx下目录浏览及其验证功能、版本隐藏等配置记录

    工作中常常有写不能有网页下载东西的需求,在Apache下搭建完成后直接导入文件即可达到下载/显示文件的效果;而Nginx的目录列表功能默认是关闭的,如果需要打开Nginx的目录列表功能,需要手动配置, ...

  8. HTTP协议基础与web服务的重定向,跳转以及请求转发

    JavaWeb中,HttpServletRequest与HttpServletResponse几乎是处理各种请求与操作必备的参数,与原始的ServletRequest/ServletResponse相 ...

  9. 【2016.3.19】作业 分析一个很有(wu)趣(liao)的小程序

    问题1:这个程序要找的是符合什么条件的数? 能够整除2-32中所有数仅除了在此之中的两个相邻的数,比如能整除2-29,且不能整除30,31.当然,这只是举个例子. 问题2:这样的数存在么?符合这一条件 ...

  10. 关于第二次阅读作业中"银弹"“大泥球”等的个人理解

    这几天时间比较充裕,就一点一点的借助英语翻译(毕竟英语不好)阅读了一下老师建议的论文作品.感觉他们的思维和我们的是不在一个角度上的,在我们看来,编写代码的任务仅仅就是实现了设计文档中的功能,而这些在课 ...