P4449-于神之怒加强版【莫比乌斯反演】
正題
題目鏈接:https://www.luogu.com.cn/problem/P4449
題目大意
TTT組詢問給出n,mn,mn,m求∑i=1n∑j=1mgcd(i,j)k\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^ki=1∑n?j=1∑m?gcd(i,j)k
解題思路
∑i=1n∑j=1mgcd(i,j)k\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^ki=1∑n?j=1∑m?gcd(i,j)k
∑d=1ndk∑i=1n∑j=1m[gcd(i,j)==d]\sum_{d=1}^nd^k\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]d=1∑n?dki=1∑n?j=1∑m?[gcd(i,j)==d]
f(x)=∑i=1n∑j=1m[gcd(i,j)==x]f(x)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==x]f(x)=i=1∑n?j=1∑m?[gcd(i,j)==x]
F(x)=∑x∣if(i)F(x)=\sum_{x|i}f(i)F(x)=x∣i∑?f(i)
F(x)=?nx??mx?F(x)=\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{x}\rfloorF(x)=?xn???xm??
f(x)=∑x∣iF(x)=∑x∣iμ(ix)?ni??mi?f(x)=\sum_{x|i}F(x)=\sum_{x|i}\mu(\frac{i}{x})\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloorf(x)=x∣i∑?F(x)=x∣i∑?μ(xi?)?in???im??
∑x=1n?nx??mx?∑x∣iμ(ix)ik\sum_{x=1}^n\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{x}\rfloor\sum_{x|i}\mu(\frac{i}{x})i^kx=1∑n??xn???xm??x∣i∑?μ(xi?)ik
然后預處理∑x∣iμ(ix)ik\sum_{x|i}\mu(\frac{i}{x})i^k∑x∣i?μ(xi?)ik的前綴和即可。
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=5e6+10,XJQ=1e9+7; ll T,k,n,m,cnt,mu[N],g[N],pw[N],pri[N]; bool vis[N]; ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%XJQ;x=x*x%XJQ;b>>=1;}return ans; } void prime(){g[1]=1;for(ll i=2;i<N;i++){if(!vis[i]){pri[++cnt]=i;pw[cnt]=power(i,k);g[i]=(pw[cnt]-1+XJQ)%XJQ;}for(ll j=1;i*pri[j]<N&&j<=cnt;j++){vis[i*pri[j]]=1;if(i%pri[j]==0){g[i*pri[j]]=g[i]*pw[j]%XJQ;break;}g[i*pri[j]]=g[i]*g[pri[j]]%XJQ;}}for(ll i=1;i<N;i++)g[i]=(g[i-1]+g[i])%XJQ;return; } int main() {scanf("%lld%lld",&T,&k);prime();while(T--){scanf("%lld%lld",&n,&m);if(n>m)swap(n,m);ll ans=0;for(ll l=1,r;l<=n;l=r+1){r=min(n/(n/l),m/(m/l));(ans+=(n/l)*(m/l)%XJQ*(g[r]-g[l-1]+XJQ)%XJQ)%=XJQ;}printf("%lld\n",(ans+XJQ)%XJQ);} }總結
以上是生活随笔為你收集整理的P4449-于神之怒加强版【莫比乌斯反演】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑设置双屏或多屏显示2种简单方法电脑如
- 下一篇: jzoj6800-NOIP2020.9.