博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
阅读量:5365 次
发布时间:2019-06-15

本文共 1244 字,大约阅读时间需要 4 分钟。

 

式子好麻烦orz……大佬好腻害orz->

1 //minamoto 2 #include
3 #include
4 #define ll long long 5 using namespace std; 6 const int N=1e7+5,mod=20101009; 7 int n,m,vis[N],p[N],cnt,mu[N];ll sum[N]; 8 ll ans,inv2,summ; 9 void init(int lim){10 mu[1]=1;11 for(int i=2;i<=lim;++i){12 if(!vis[i]) p[++cnt]=i,mu[i]=-1;13 for(int j=1;j<=cnt&&p[j]*i<=lim;++j){14 vis[i*p[j]]=1;15 if(i%p[j]==0) break;16 mu[i*p[j]]=-mu[i];17 }18 }19 for(int i=1;i<=lim;++i)20 (sum[i]=sum[i-1]+1ll*mu[i]*i*i)%=mod;21 }22 ll calc(int mx,int l){23 return (1ll+mx/l)*(mx/l)%mod*inv2%mod;24 }25 int main(){26 // freopen("testdata.in","r",stdin);27 scanf("%d%d",&n,&m);28 int lim;init(lim=min(n,m));29 ans=0,inv2=(mod+1)/2,summ=0;30 for(int d=1;d<=lim;++d){31 int mxx=n/d,myy=m/d,mn=min(mxx,myy);32 summ=0;33 for(int l=1,r;l<=mn;l=r+1){34 r=min(mxx/(mxx/l),myy/(myy/l));35 (summ+=(sum[r]-sum[l-1])%mod*calc(mxx,l)%mod*calc(myy,l)%mod)%=mod;36 }37 (ans+=summ*d)%=mod;38 }39 printf("%lld\n",(ans%mod+mod)%mod);40 return 0;41 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9699659.html

你可能感兴趣的文章
4种java定时器
查看>>
Vue.js 教程
查看>>
linux 设置网卡
查看>>
Ajax:js读取txt内容(json格式内容)
查看>>
组合数据类型练习,英文词频统计实例上
查看>>
Uber回馈开源的一些软件
查看>>
day 3 修改haproxy.cfg 作业
查看>>
sim usim Uim 区别
查看>>
网页中插入透明Flash的方法和技巧
查看>>
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
查看>>
获取元素属性get_attribute
查看>>
Python/jquery
查看>>
【BZOJ】【2132】圈地计划
查看>>
Lua 语言基本语法
查看>>
ARM 的Thumb状态测试
查看>>
windows下读取utf-8文件
查看>>
apache 启动不了的排查方法
查看>>
Java有没有goto?
查看>>
(转)makefile 的用法
查看>>
求不相邻金币相加和的最大值--动态规划1
查看>>