题目大意

给出 n , m n,m n,m,求 ∑ i = 1 n ∑ j = 1 m ϕ ( i j ) \sum\limits_{i=1}^n\sum\limits_{j=1}^m\phi(ij) i=1∑n​j=1∑m​ϕ(ij)

1 ≤ n ≤ 1 0 5 , 1 ≤ m ≤ 1 0 9 1\leq n\leq 10^5,1\leq m\leq 10^9 1≤n≤105,1≤m≤109,答案模 1 0 9 + 7 10^9+7 109+7。

题解

前置知识:杜教筛

因为 n n n比较小,所以我们可以直接枚举 n n n。

设 f ( n , m ) = ∑ i = 1 m ϕ ( n i ) f(n,m)=\sum\limits_{i=1}^m\phi(ni) f(n,m)=i=1∑m​ϕ(ni)

将 n n n分为若干个质数的乘积, n = p 1 a 1 p 2 a 2 ⋯ p k a k n=p_1^{a_1}p_2^{a_2}\cdots p_k^{a_k} n=p1a1​​p2a2​​⋯pkak​​,令 p = p 1 a 1 − 1 p 2 a 2 − 1 ⋯ p k a k − 1 p=p_1^{a_1-1}p_2^{a_2-1}\cdots p_k^{a_k-1} p=p1a1​−1​p2a2​−1​⋯pkak​−1​, q = n / p q=n/p q=n/p

∑ i = 1 m ϕ ( n i ) = ∑ i = 1 m p ϕ ( q i ) = ∑ i = 1 m p ϕ ( q gcd ⁡ ( q , i ) × i ) × gcd ⁡ ( q , i ) \sum\limits_{i=1}^m\phi(ni)=\sum\limits_{i=1}^mp\phi(qi)=\sum\limits_{i=1}^mp\phi(\dfrac{q}{\gcd(q,i)}\times i)\times \gcd(q,i) i=1∑m​ϕ(ni)=i=1∑m​pϕ(qi)=i=1∑m​pϕ(gcd(q,i)q​×i)×gcd(q,i)

因为 ϕ ( i ) \phi(i) ϕ(i)为积性函数,所以 ϕ ( q gcd ⁡ ( q , i ) × i ) = ϕ ( q gcd ⁡ ( q , i ) ) × ϕ ( i ) \phi(\dfrac{q}{\gcd(q,i)}\times i)=\phi(\dfrac{q}{\gcd(q,i)})\times\phi(i) ϕ(gcd(q,i)q​×i)=ϕ(gcd(q,i)q​)×ϕ(i),原式变为

p ∑ i = 1 m ϕ ( q gcd ⁡ ( q , i ) ) × ϕ ( i ) × gcd ⁡ ( q , i ) p\sum\limits_{i=1}^m\phi(\dfrac{q}{\gcd(q,i)})\times\phi(i)\times \gcd(q,i) pi=1∑m​ϕ(gcd(q,i)q​)×ϕ(i)×gcd(q,i)

由欧拉函数的性质, n = ∑ d ∣ n ϕ ( n d ) n=\sum\limits_{d|n}\phi(\dfrac nd) n=d∣n∑​ϕ(dn​),可得

p ∑ i = 1 m ϕ ( i ) ϕ ( q gcd ⁡ ( q , i ) ) ∑ j ∣ i , j ∣ q ϕ ( gcd ⁡ ( q , i ) j ) p\sum\limits_{i=1}^m\phi(i)\phi(\dfrac{q}{\gcd(q,i)})\sum\limits_{j|i,j|q}\phi(\dfrac{\gcd(q,i)}{j}) pi=1∑m​ϕ(i)ϕ(gcd(q,i)q​)j∣i,j∣q∑​ϕ(jgcd(q,i)​)

因为 q gcd ⁡ ( q , i ) \dfrac{q}{\gcd(q,i)} gcd(q,i)q​与 gcd ⁡ ( q , i ) \gcd(q,i) gcd(q,i)互质( q = p 1 p 2 ⋯ p k q=p_1p_2\cdots p_k q=p1​p2​⋯pk​,同一个质数要不不出现,要不出现在 q gcd ⁡ ( q , i ) \dfrac{q}{\gcd(q,i)} gcd(q,i)q​或 gcd ⁡ ( q , i ) \gcd(q,i) gcd(q,i),不可能两个都出现)而 ϕ \phi ϕ为积性函数,所以 ϕ ( q gcd ⁡ ( q , i ) ) × ϕ ( gcd ⁡ ( q , i ) j ) = ϕ ( q j ) \phi(\dfrac{q}{\gcd(q,i)})\times \phi(\dfrac{\gcd(q,i)}{j})=\phi(\dfrac qj) ϕ(gcd(q,i)q​)×ϕ(jgcd(q,i)​)=ϕ(jq​),可得

p ∑ i = 1 m ϕ ( i ) ∑ j ∣ i , j ∣ q ϕ ( q j ) p\sum\limits_{i=1}^m\phi(i)\sum\limits_{j|i,j|q}\phi(\dfrac qj) pi=1∑m​ϕ(i)j∣i,j∣q∑​ϕ(jq​)

枚举 j j j得

p ∑ j ∣ q ϕ ( q j ) ∑ i = 1 ⌊ m j ⌋ ϕ ( i j ) p\sum\limits_{j|q}\phi(\dfrac qj)\sum\limits_{i=1}^{\lfloor\frac mj\rfloor}\phi(ij) pj∣q∑​ϕ(jq​)i=1∑⌊jm​⌋​ϕ(ij)

因为 f ( n , m ) = ∑ i = 1 m ϕ ( n i ) f(n,m)=\sum\limits_{i=1}^m\phi(ni) f(n,m)=i=1∑m​ϕ(ni),所以

p ∑ j ∣ q ϕ ( q j ) × f ( j , ⌊ m j ⌋ ) p\sum\limits_{j|q}\phi(\dfrac qj)\times f(j,\lfloor\dfrac mj\rfloor) pj∣q∑​ϕ(jq​)×f(j,⌊jm​⌋)

于是我们就得到了递推式

f ( n , m ) = p ∑ j ∣ q ϕ ( q j ) × f ( j , ⌊ m j ⌋ ) f(n,m)=p\sum\limits_{j|q}\phi(\dfrac qj)\times f(j,\lfloor\dfrac mj\rfloor) f(n,m)=pj∣q∑​ϕ(jq​)×f(j,⌊jm​⌋)

预处理出前 n 2 3 n^{\frac 23} n32​个 ϕ ( i ) \phi(i) ϕ(i)并求前缀和,用杜教筛 ϕ ( i ) \phi(i) ϕ(i)的前缀和,利用 ϕ \phi ϕ的前缀和作差得出每个 ϕ ( q j ) \phi(\dfrac qj) ϕ(jq​),然后就可以用杜教筛求 f ( n , m ) f(n,m) f(n,m)了。

注意 f ( n , m ) f(n,m) f(n,m)的一些特殊值。

  • 当 n = 1 n=1 n=1时, f ( n , m ) = ∑ i = 1 m ϕ ( i ) f(n,m)=\sum\limits_{i=1}^m\phi(i) f(n,m)=i=1∑m​ϕ(i)
  • 当 m = 1 m=1 m=1时, f ( n , m ) = ϕ ( n ) f(n,m)=\phi(n) f(n,m)=ϕ(n)

最终的答案为 ∑ i = 1 n f ( i , m ) \sum\limits_{i=1}^nf(i,m) i=1∑n​f(i,m)。

code

#include<bits/stdc++.h>
using namespace std;
const int N=2000000;
const long long mod=1000000007;
int z[N+5],p[N+5],mn[N+5];
long long ans,ph[N+5],s[N+5];
map<long long,long long>sph,sum[100005];
void init(){ph[1]=1;for(int i=2;i<=N;i++){if(!z[i]){p[++p[0]]=i;ph[i]=i-1;mn[i]=i;}for(int j=1;j<=p[0]&&i*p[j]<=N;j++){z[i*p[j]]=1;mn[i*p[j]]=p[j];if(i%p[j]==0){ph[i*p[j]]=ph[i]*p[j]%mod;break;}ph[i*p[j]]=ph[i]*(p[j]-1)%mod;}}for(int i=1;i<=N;i++){s[i]=(s[i-1]+ph[i])%mod;}
}
long long gt(int n){if(n<=N) return s[n];if(sph.count(n)) return sph[n];long long re=0;for(int l=2,r;l<=n;l=r+1){r=min(n,n/(n/l));re=(re+1ll*(r-l+1)*gt(n/l)%mod)%mod;}re=(1ll*n*(n+1)/2-re+mod)%mod;return sph[n]=re;
}
long long djs(int n,int m){if(!m) return 0;if(n==1) return gt(m);if(m==1) return ph[n];if(sum[n].count(m)) return sum[n][m];long long re=0;vector<int>v;int p=1,q=1,t=n,l=0;while(t>1){int x=mn[t];q*=x;t/=x;v.push_back(x);++l;while(t%x==0){p*=x;t/=x;}}for(int i=0;i<1<<l;i++){int vt=1;for(int j=0;j<l;j++)if(i&(1<<j)) vt*=v[j];re=(re+ph[q/vt]*djs(vt,m/vt)%mod)%mod;}return sum[n][m]=re*p%mod;
}
int main()
{int n,m;init();scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){ans=(ans+djs(i,m))%mod;}printf("%lld",ans);return 0;
}

【BZOJ3512】DZY Loves Math IV相关推荐

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

    [BZOJ3512]DZY Loves Math IV(杜教筛) https://www.cnblogs.com/cjyyb/p/10165338.html

  2. 【BZOJ3512】 DZY Loves Math IV

    题意:(第n+1次)略 首先转换:Ans(n,m)=∑i=1n∑j=1mφ(i⋅j)设s(n,m)=∑i=1mφ(n⋅i)那么Ans(n,m)=∑i=1ns(i,m)每次从1到n枚举i,然后考虑:s( ...

  3. 【BZOJ3309】DZY Loves Math 解题报告

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

  4. 【BZOJ3309】DZY Loves Math

    3309: DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MB Submit: 411 Solved: 161 [Submit][Status ...

  5. 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛

    Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b, ...

  6. 【题解】DZY Loves Math

    sol: 卷积函数求通项 + 莫比乌斯函数 . 我们只需要求到 g(n)=∑d∣nf(d)μ(nd)g(n)=\sum_{d|n}f(d)\mu(\frac{n}{d})g(n)=∑d∣n​f(d)μ ...

  7. 【BZOJ3309】DZY Loves Math(线性筛)

    题目: BZOJ 3309 分析: 首先,经过一番非常套路的莫比乌斯反演(实在懒得写了),我们得到: \[\sum_{T=1}^n \sum_{d|T}f(d)\mu(\frac{T}{d})\lfl ...

  8. 【CF446B】 DZY Loves Modification

    题目 题目描述 As we know, DZY loves playing games. One day DZY decided to play with a n×m n×m matrix. To b ...

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

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

最新文章

  1. 谁说技术男不适合养猫!90后程序员2天做出猫咪情绪识别软件
  2. php 控制网站跳转,迅睿CMS 重写控制网站自动跳转函数
  3. 在新基建风口上,华为“鲲鹏”这次要翱翔了
  4. nginx的upstream问题记录
  5. python中counter_Python collections模块中counter()的详细说明,Pythoncollections,之,Counter,详解...
  6. 乐迪机器人开热点_碧桂园餐饮机器人量产!预计年产能达4000台
  7. javascript学习系列(23):数组中的解构方法
  8. html打印代码_惊呆了,我的 Python 代码里面出现了薛定谔的 Bug
  9. 怎样通过Java程序提交yarn的mapreduce计算任务
  10. .Net Webapi SignalR与微信小程序的交互
  11. ckdeitor的使用方法
  12. 计算机课程设计心得体会及总结,课程设计心得体会
  13. editText属性
  14. 前端面试(面试官篇)
  15. 计算机网络 华东理工大学 2020期末考试
  16. 使用Python构造数据包
  17. PyCharm选择性忽略PEP8代码风格警告信息
  18. windows下sass开发环境的搭建
  19. Dao,Service,Controller层作用
  20. 哪个牌子蓝牙耳机打电话清晰?通话最清晰的蓝牙耳机推荐

热门文章

  1. OPPO手机wifi信号不好怎么自动切换数据
  2. office2013安装出错,老是出现找不到officeMUI.msi或则officeMUI.xml等,是什么原因?
  3. 小巧轻便的腕上精灵,七夕就送讯飞腕式录音笔R1
  4. HBase内置过滤器的一些总结
  5. WebKit 内容整理
  6. 为教育工作者精选的8款堪称「神器」的软件,快看过来
  7. 阈值型忆阻器之RC震荡电路
  8. Java程序设计实验四:Java小应用程序界面设计
  9. 振动采集卡测试示例及说明
  10. 基础向:「财务对账」的秘密都在这篇 3000 字的文章里