BZOJ 3561 DZY Loves Math VI
2017-03-01 20:41
357 查看
既然是5e5那直接mlogm暴力咯。。。
推式子要认真。。。。233
推式子要认真。。。。233
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 500500 #define mod 1000000007 using namespace std; long long n,m,a[maxn],sum[maxn],ans=0,prime[maxn],tot=0,miu[maxn]; bool vis[maxn]; void get_table() { miu[1]=1; for (long long i=2;i<=maxn-500;i++) { if (!vis[i]) {prime[++tot]=i;miu[i]=-1;} for (long long j=1;i*prime[j]<=maxn-500 && j<=tot;j++) { vis[i*prime[j]]=true; if (i%prime[j]) miu[i*prime[j]]=-miu[i]; else {miu[i*prime[j]]=0;break;} } } } long long f_pow(long long x,long long y) { long long ans=1,base=x; while (y) { if (y&1) ans=(ans*base)%mod; base=(base*base)%mod; y>>=1; } return ans; } int main() { scanf("%lld%lld",&n,&m);get_table(); if (n>m) swap(n,m); for (long long i=1;i<=m;i++) a[i]=1,sum[i]=i; for (long long i=1;i<=n;i++) { for (long long j=1;j*i<=m;j++) {a[j]=a[j]*j%mod;sum[j]=(sum[j-1]+a[j])%mod;} long long ret=0; for (long long j=1;j*i<=n;j++) {ret+=miu[j]*sum[n/i/j]*sum[m/i/j]%mod*a[j]%mod*a[j]%mod;ret%=mod;} ans+=ret*f_pow(i,i);ans%=mod; } printf("%lld\n",ans); return 0; }
相关文章推荐
- 【BZOJ】3561: DZY Loves Math VI
- 【BZOJ 3561】 3561: DZY Loves Math VI (莫比乌斯,均摊log)
- ●BZOJ 3561 DZY Loves Math VI
- 【BZOJ 3561】 DZY Loves Math VI
- BZOJ 3561 DZY Loves Math VI(莫比乌斯反演)
- BZOJ_P3561 DZY Loves Math VI(数论+莫比乌斯反演)
- bzoj3512: DZY Loves Math IV
- BZOJ 3309 DZY Loves Math
- 【BZOJ3309】DZY Loves Math 莫比乌斯反演+线性筛(好题)
- BZOJ 3309: DZY Loves Math
- BZOJ 3309 DZY Loves Math (莫比乌斯反演的应用 好题)
- 「BZOJ3561」DZY Loves Math VI
- bzoj 3309: DZY Loves Math (反演)
- ●BZOJ 3512 DZY Loves Math IV
- [bzoj3561] DZY Loves Math VI
- bzoj3561 DZY Loves Math VI 莫比乌斯函数
- [BZOJ3512]DZY Loves Math IV 杜教筛+记忆化搜索
- bzoj3512-DZY Loves Math IV
- [杜教筛] BZOJ3512. DZY Loves Math IV
- 【BZOJ3309】DZY Loves Math