[bzoj3561]DZY Loves Math VI

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define mod 1000000007
 4 #define N 500005
 5 #define ll long long
 6 ll n,m,t,ans,mu[N],vis[N],p[N],c[N],sum[N];
 7 void xxs(int n){
 8     mu[1]=1;
 9     for(int i=2;i<=n;i++){
10         if (!vis[i])mu[p[++p[0]]=i]=-1;
11         for(int j=1;(j<=p[0])&&(i*p[j]<=n);j++){
12             vis[i*p[j]]=1;
13             if (i%p[j]==0)break;
14             mu[i*p[j]]=-mu[i];
15         }
16     }
17 }
18 ll ksm(ll n,ll m){
19     if (!m)return 1LL;
20     ll s=ksm(n,m>>1);
21     s=s*s%mod;
22     if (m&1)s=s*n%mod;
23     return s;
24 }
25 int main(){
26     xxs(N-5);
27     scanf("%lld%lld", &n,&m);
28     if (n<m)swap(n,m);
29     for(int i=1;i<=n;i++)c[i]=1;
30     for(int i=1;i<=m;i++){
31         for(int j=1;i*j<=n;j++){
32             c[j]=c[j]*j%mod;
33             sum[j]=(sum[j-1]+c[j])%mod;
34         }
35         t=ksm(i,i);
36         for(int j=1;i*j<=m;j++)ans=(ans+t*mu[j]%mod*c[j]%mod*c[j]%mod*sum[n/(i*j)]%mod*sum[m/(i*j)])%mod;
37     }
38     printf("%lld",ans);
39 }
View Code

猜你喜欢

转载自www.cnblogs.com/PYWBKTDA/p/11249830.html