JZOJ 4161. 于神之怒
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 4161. 于神之怒
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Description
Input
一行三個(gè)數(shù),m, n, k。
Output
Sample Input
樣例1
3 3 2
樣例2
5000000 5000000 4000000
Sample Output
樣例1
20
樣例2
?913111630
Data Constraint
Solution
- 直接上莫比烏斯反演:
Ans=∑i=1n∑j=1mgcd(i,j)kAns=∑i=1n∑j=1mgcd(i,j)k
Ans=∑ddk∑i=1n∑j=1m[gcd(i,j)=d]Ans=∑ddk∑i=1n∑j=1m[gcd(i,j)=d]
Ans=∑ddk∑i=1?nd?∑j=1?md?[gcd(i,j)=1]Ans=∑ddk∑i=1?nd?∑j=1?md?[gcd(i,j)=1]
Ans=∑ddk∑i=1?nd?∑j=1?md?∑u|gcd(i,j)μ(u)Ans=∑ddk∑i=1?nd?∑j=1?md?∑u|gcd(i,j)μ(u)
這一步是因?yàn)?#xff1a;
∑d|nμ(d)=[n=1]∑d|nμ(d)=[n=1]于是我們繼續(xù)變換:
Ans=∑ddk∑uμ(u)?ndu??mdu?Ans=∑ddk∑uμ(u)?ndu??mdu?
令 D=duD=du ,再將 DD 提到前面(這是為了湊形式):Ans=∑D?nD??mD?∑d|Ddk?μ(Dd)Ans=∑D?nD??mD?∑d|Ddk·μ(Dd)
令單位冪函數(shù) idk(d)=dkidk(d)=dk ,那么有:
Ans=∑D?nD??mD?f(D)Ans=∑D?nD??mD?f(D)其中:
f(D)=∑d|Didk(d)?μ(Dd)f(D)=∑d|Didk(d)·μ(Dd)是狄利克雷卷積!即:f=idk?μf=idk?μ
對(duì)于 ff 這個(gè)積性函數(shù),我們可以用線(xiàn)篩求出(跟篩 φφ 差不多)。
之后做出前綴和就可以分塊求答案了。
這種算法明顯優(yōu)于其它什么兩次分塊的算法,可以做多組詢(xún)問(wèn)。
就是提前給出 kk ,每次詢(xún)問(wèn)給出一組 n,mn,m ,范圍還是 n,m,k≤5?106n,m,k≤5?106 ,詢(xún)問(wèn)數(shù) T≤2000T≤2000 。
那先預(yù)處理出 ff ,每次 O(n??√)O(n) 回答詢(xún)問(wèn),時(shí)間復(fù)雜度 O(n+Tn??√)O(n+Tn) 。
Code
#include<cstdio> #include<algorithm> #include<cctype> using namespace std; typedef long long LL; const int N=5e6+5,mo=1e9+7; int f[N],g[N]; bool bz[N]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } inline int ksm(int x,int y) {int s=1;while(y){if(y&1) s=(LL)s*x%mo;x=(LL)x*x%mo;y>>=1;}return s; } inline int min(int x,int y) {return x<y?x:y; } int main() {int n=read(),m=read(),k=read(),ans=0;g[1]=1;for(int i=2;i<N;i++){if(!bz[i]){f[++f[0]]=i;g[i]=ksm(i,k)-1;}for(int j=1;j<=f[0] && i*f[j]<N;j++){bz[i*f[j]]=true;if(i%f[j]==0){g[i*f[j]]=(LL)g[i]*(g[f[j]]+1)%mo;break;}g[i*f[j]]=(LL)g[i]*g[f[j]]%mo;}}for(int i=1;i<N;i++) g[i]=(g[i-1]+g[i])%mo;if(n>m) swap(n,m);for(int i=1,p;i<=n;i=p+1){p=min(n/(n/i),m/(m/i));ans=(ans+(LL)(n/p)*(m/p)%mo*(g[p]-g[i-1]+mo)%mo)%mo;}printf("%d\n",ans);return 0; }總結(jié)
以上是生活随笔為你收集整理的JZOJ 4161. 于神之怒的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JZOJ 5701. 【gdoi2018
- 下一篇: JZOJ 5703. 【gdoi2018