BZOJ 2154(莫比乌斯函数+分块)
来源:互联网 发布:压缩感知重构算法 编辑:程序博客网 时间:2024/06/06 07:15
2154: Crash的数字表格
Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1237 Solved: 494
[Submit][Status][Discuss]
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。
Output
输出一个正整数,表示表格中所有数的和mod 20101009的值。
Sample Input
4 5
Sample Output
122
【数据规模和约定】
100%的数据满足N, M ≤ 10^7。
【数据规模和约定】
100%的数据满足N, M ≤ 10^7。
代码供自己看!
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define N 10000008#define MOD 20101009typedef long long LL;int prim[N],vis[N],mu[N],top;int sum[N],MuSum[N];int min(int x,int y){ return x<y?x:y; }LL pow(LL x){ return x*x%MOD; }
//获取莫比乌斯函数void getMu(){ memset(vis,0,sizeof(vis)); mu[1] = 1; top = 0; for(int i = 2;i<N;i++){ if(vis[i]==0){ prim[top++] = i; mu[i] = -1; } for(int j = 0;j<top&&(LL)prim[j]*i<N;j++){ vis[i*prim[j]] = 1; if(i%prim[j]==0){ mu[i*prim[j]] = 0; break; } mu[i*prim[j]] = -mu[i]; } }}LL solve(int n,int m){ LL ans = 0; for(int i = 1,end;i<=min(n,m);i=end+1){ end = min(n/(n/i),m/(m/i)); LL s1 = n/i,s2 = m/i; LL g1 = ((1+s1)*s1/2)%MOD; LL g2 = ((1+s2)*s2/2)%MOD; LL g = g1*g2%MOD; ans = (ans + (MuSum[end]-MuSum[i-1]+MOD)%MOD*g%MOD + MOD)%MOD; } return ans;}void init(){ getMu(); sum[0] = MuSum[0] = 0; for(int i = 1;i<N;i++){ MuSum[i] = (MuSum[i-1] + (LL)i*i*mu[i])%MOD; sum[i] = (sum[i-1] + i)%MOD; }}int main(){ int n,m; init(); while(~scanf("%d%d",&n,&m)){ LL res = 0; for(int i = 1,end;i<=min(n,m);i=end+1){ end = min(n/(n/i),m/(m/i)); res = (res + (sum[end]-sum[i-1]+MOD)%MOD*solve(n/i,m/i)%MOD +MOD)%MOD; } printf("%lld\n",res); } return 0;}
0 0
- BZOJ 2154(莫比乌斯函数+分块)
- bzoj 2301 -莫比乌斯函数反演+分块优化
- BZOJ 1101 莫比乌斯函数+分块
- BZOJ 2301 莫比乌斯函数+分块
- 【BZOJ】2301 [HAOI2011]Problem b && 【BZOJ】1101 [POI2007]Zap 莫比乌斯函数+数论分块
- 【BZOJ】4804 欧拉心算 莫比乌斯函数+欧拉函数+数论分块
- bzoj 2820-莫比乌斯函数反演+分块优化 +换元优化
- [BZOJ]1101 莫比乌斯+分块优化
- TrickGCD----筛法/分块/莫比乌斯函数
- [BZOJ 2301] Problem b【莫比乌斯反演/容斥原理/分块】
- BZOJ 2301 - 莫比乌斯反演 + 前缀和 + 分块计算
- [BZOJ 1101] POI 2007 Zap · 莫比乌斯 & 分块 超详细题解
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演 + 容斥原理 + 分块优化)
- BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演,分块,容斥)
- Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
- Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)
- bzoj 4815: [Cqoi2017]小Q的表格 分块+莫比乌斯反演
- [分块 莫比乌斯反演] BZOJ 4815 [Cqoi2017]小Q的表格
- oracle查询锁表解锁语句
- EDA学习--Quartus II 9.1最基本的使用方法
- 关于ODBC的一些内容
- ionic tab导航在android 真机测试中 导航在顶部解决办法
- IOS中UICollectionViewCell的问题
- BZOJ 2154(莫比乌斯函数+分块)
- thinkphp post无法接收数组 解决
- lua语言学习——入门之基本语法
- Error:no override found for "vtkRenderer"/"vtkImageMapper"
- 利用Matlab编程GUI时常用的内置对话框
- 2015360在线笔试题
- 文章标题
- 测试
- 【CSS】对于超出div部分的处理