BZOJ 2154 Crash的数字表格(莫比乌斯反演)
来源:互联网 发布:淘宝上买摩托车可靠吗 编辑:程序博客网 时间:2024/06/06 03:42
Description
今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple)。对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数。例如,LCM(6, 8) = 24。回到家后,Crash还在想着课上学的东西,为了研究最小公倍数,他画了一张N*M的表格。每个格子里写了一个数字,其中第i行第j列的那个格子里写着数为LCM(i, j)。一个4*5的表格如下: 1 2 3 4 5 2 2 6 4 10 3 6 3 12 15 4 4 12 4 20 看着这个表格,Crash想到了很多可以思考的问题。不过他最想解决的问题却是一个十分简单的问题:这个表格中所有数的和是多少。当N和M很大时,Crash就束手无策了,因此他找到了聪明的你用程序帮他解决这个问题。由于最终结果可能会很大,Crash只想知道表格里所有数的和mod 20101009的值。
Input
输入的第一行包含两个正整数,分别表示N和M(N,M<=10^7)
Output
输出一个正整数,表示表格中所有数的和mod 20101009的值。
Sample Input
4 5
Sample Output
122
Solution
两部分分别用分块加速,时间复杂度O(n)
Code
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;#define maxn 11111111 #define mod 20101009typedef long long ll;bool check[maxn];int prime[maxn],mu[maxn];ll sum[maxn];void Moblus(int n){ memset(check,0,sizeof(check)); mu[1]=sum[1]=1; int tot=0; for(int i=2;i<=n;i++) { if(!check[i]) { prime[tot++]=i; mu[i]=-1; } for(int j=0;j<tot;j++) { if(i*prime[j]>n)break; check[i*prime[j]]=1; if(i%prime[j]==0) { mu[i*prime[j]]=0; break; } else mu[i*prime[j]]=-mu[i]; } sum[i]=(1ll*i*i%mod*mu[i]+sum[i-1]+mod)%mod; }}ll Sum(int x,int y){ return (1ll*x*(x+1)/2%mod)*(1ll*y*(y+1)/2%mod)%mod;}ll f(int x,int y){ if(x>y)swap(x,y); ll ans=0; for(int i=1,next=0;i<=x;i=next+1) { next=min(x/(x/i),y/(y/i)); ans=(ans+(sum[next]-sum[i-1])*Sum(x/i,y/i)%mod+mod)%mod; } return ans;}ll solve(int n,int m){ if(n>m)swap(n,m); ll ans=0; for(int i=1,next=0;i<=n;i=next+1) { next=min(n/(n/i),m/(m/i)); ll temp=(1ll*next*(next+1)/2%mod-1ll*i*(i-1)/2%mod+mod)%mod; ans=(ans+temp*f(n/i,m/i)%mod+mod)%mod; } return ans;}int main(){ Moblus(maxn-10); int n,m; while(~scanf("%d%d",&n,&m)) printf("%lld\n",solve(n,m)); return 0;}
0 0
- 【bzoj 2154】Crash的数字表格(莫比乌斯反演)
- BZOJ 2154 Crash的数字表格(sigma(lcm(i,j)),莫比乌斯反演)
- BZOJ 2154 Crash的数字表格(莫比乌斯反演)
- BZOJ 2154 Crash的数字表格 莫比乌斯反演
- HYSBZ/BZOJ 2154 Crash的数字表格 - 莫比乌斯反演
- BZOJ-2154 && 2693 Crash的数字表格&&jzptab 莫比乌斯反演
- BZOJ 2154(Crash的数字表格-莫比乌斯反演)
- [莫比乌斯反演] BZOJ 2154 Crash的数字表格
- bzoj 2154: Crash的数字表格 莫比乌斯反演
- 【BZOJ 2154】Crash的数字表格 莫比乌斯反演
- [BZOJ 2154]Crash的数字表格:莫比乌斯反演
- 【BZOJ】【P2154】【Crash的数字表格】【题解】【莫比乌斯反演】
- [BZOJ2154]Crash的数字表格 && 莫比乌斯反演
- 【莫比乌斯反演】[BZOJ2154]Crash的数字表格
- 【bzoj2154】【Crash的数字表格】【莫比乌斯反演】
- bzoj2154 Crash的数字表格(莫比乌斯反演)
- 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)
- 2693: jzptab/2154: Crash的数字表格 莫比乌斯反演
- 图的最短路径的问题
- HDU 4313 Matrix(并查集/破坏边使得k个点两两不连通的最少代价)
- android学习笔记(1)---eclipse中新建一个Android工程如何选择sdk
- iOS 关联函数的使用
- CityMaker学习教程15 一个免费的js功能框架
- BZOJ 2154 Crash的数字表格(莫比乌斯反演)
- 杨绛:她和谁都不争,和谁争都不屑
- QImage图像格式
- JS 传参Url加密解密
- #541 Zigzag Iterator II
- 【HDU】 5791 Two
- 线性表之顺序表存储结构
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- 关于点击某个按钮需要Edittext和软键盘一起弹出的操作和监听软键盘的关闭