[BZOJ2154] Crash的数字表格
来源:互联网 发布:firefly linux 安装 编辑:程序博客网 时间:2024/05/29 19:11
[BZOJ2154] Crash的数字表格
题目的意思就是求出
我们可以把问题进行转换,有:
然后我们设
然后继续把
通过莫比乌斯反演我们可以得到:
现在我们去枚举
然后通过在主函数中进行分块加速,以及f函数中的分块加速,使得复杂度为
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define M 10000005#define P 20101009using namespace std;int f[M],mu[M],sum[M],sz=0,n,m;bool vis[M];void Init(){ mu[1]=1; for(int i=2;i<=n;i++){ if(!vis[i])f[sz++]=i,mu[i]=-1; for(int j=0,ll=f[j]*i;j<sz&&ll<=n;j++,ll=f[j]*i){ vis[ll]=1; if(i%f[j]==0){ mu[ll]=0; break; } mu[ll]=-mu[i]; } } for(int i=1;i<=n;i++)sum[i]=(sum[i-1]+1LL*i*i*mu[i])%P;}int Sum(int x,int y){ return (1LL*x*(x+1)/2%P)*(1LL*y*(y+1)/2%P)%P;}void Add(int &x,int y){ if(y<0)y+=P; x+=y; if(x>=P)x-=P;}int w(int x,int y){ int re=0; for(int i=1;i<=x;i++){ int l=x/i,r=y/i; l=x/l,r=y/r; if(l>r)l=r; Add(re,1LL*(sum[l]-sum[i-1])*Sum(x/i,y/i)%P); i=l; } return re;}int solve(){ int re=0; for(int i=1;i<=n;i++){ int l=n/i,r=m/i; l=n/l,r=m/r; if(l>r)l=r; Add(re,1LL*w(n/i,m/i)*(Sum(l,1)-Sum(i-1,1))%P); i=l; } return re;}int main(){ scanf("%d %d",&n,&m); if(n>m)swap(n,m); Init(); printf("%d\n",solve()); return 0;}
0 0
- 【BZOJ2154】Crash的数字表格
- bzoj2154: Crash的数字表格
- BZOJ2154: Crash的数字表格
- bzoj2154: Crash的数字表格
- [bzoj2154]Crash的数字表格
- bzoj2154 Crash的数字表格
- bzoj2154 Crash的数字表格
- [BZOJ2154] Crash的数字表格
- bzoj2154 Crash的数字表格
- bzoj2154 Crash的数字表格
- bzoj2154: Crash的数字表格
- bzoj2154: Crash的数字表格
- [bzoj2154]Crash的数字表格
- BZOJ2154: Crash的数字表格
- bzoj2154 Crash的数字表格
- [bzoj2154]Crash的数字表格
- 【bzoj2154】Crash的数字表格
- BZOJ2154 Crash的数字表格
- Gradle系列二
- 《2016年中国跨境电商邮件营销市场报告》
- shell半自动化部署standalone的spark分布式集群
- Xcode - 配置.gitignore文件
- 10分钟教你学会3D Touch
- [BZOJ2154] Crash的数字表格
- log4j日志配置
- 日本到底强大到什么地步?让人窒息!
- QWidget QMainWindow QDialog 之间的区别
- angular 2 学习笔记 2--理解项目结构
- html的“object HTMLDivElement”与jquery“object Object”相互之间的转换方式
- php死锁问题
- 关于指针
- Linux遭遇Segmentation fault