算是学会反演了……(其实挺好学的一天就能学会……

原题:

今天的数学课上,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的值。

反演嘛,直接推公式

(Atom和即时预览的latex插件真好用

(治好了我多年的公式恐惧症~~(模仿po姐

然后按照莫比乌斯反演经典的计算方法for(int i=1,j;i<=n;i=j+1)  j=min(n/(n/i),m/(m/i));O(√n*√n)=O(n)计算就可以了

需要注意的是因为计算过程中是在模意义下计算的,所以会出现负数(但是因为计算是在模意义下进行的所以答案确实是对的),最后需要加模数再取模

(反演其实挺好学的一天就能学会(就学个反演都拖了一年我以前真是钍氧钍砷钋熵钛镎铱钨

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long
const int mo=;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
void wt(int x){if(x<) putchar('-'),x=-x;
int wtp=; char wtc[];
while(x) wtc[++wtp]=(x%)+'',x/=;
while(wtp) putchar(wtc[wtp--]);
}
int n,m;
int prm[],prp=,miu[]; bool prg[];
int s[];
void gtmiu(){
fill(prg+,prg+n+,);
miu[]=;
for(int i=;i<=n;++i){
if(!prg[i]) prm[++prp]=i,miu[i]=-;
for(int j=;j<=prp && i*prm[j]<=n;++j){
prg[i*prm[j]]=true;
if(!(i%prm[j])){ miu[i*prm[j]]=; break;}
miu[i*prm[j]]=-miu[i];
}
}
for(ll i=;i<=n;++i)
s[i]=(s[i-]+(i*i*miu[i])%mo)%mo;
}
ll sm(ll x,ll y){ return (((x*(x+)/)%mo)*((y*(y+)/)%mo))%mo;}
ll cclt(int x,int y){
if(x>y) swap(x,y);
ll bwl=;
for(ll i=,j;i<=x;i=j+){
j=min(x/(x/i),y/(y/i));
bwl=(bwl+((s[j]-s[i-])*sm(x/i,y/i))%mo)%mo;
}
return bwl;
}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m;
if(n>m) swap(n,m);
gtmiu();
ll ans=;
for(ll i=,j;i<=n;i=j+){
j=min(n/(n/i),m/(m/i));
ans=(ans+(((i+j)*(j-i+)/)%mo*cclt(n/i,m/i))%mo)%mo;
}
cout<<(ans+mo)%mo<<endl;
return ;
}

【BZOJ2154】Crash的数字表格的更多相关文章

  1. BZOJ2154 Crash的数字表格 【莫比乌斯反演】

    BZOJ2154 Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b) ...

  2. BZOJ2154: Crash的数字表格 & BZOJ2693: jzptab

    [传送门:BZOJ2154&BZOJ2693] 简要题意: 给出n,m,求$\sum_{i=1}^{n}\sum_{j=1}^{m}LCM(i,j)$ 题解: 莫比乌斯反演(因为BZOJ269 ...

  3. Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)

    题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...

  4. BZOJ2154: Crash的数字表格

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2154 题意&&题解:http://www.cnblogs.com/jiangl ...

  5. 【莫比乌斯反演】BZOJ2154 Crash的数字表格

    Description 求sigma lcm(x,y),x<=n,y<=m.n,m<=1e7. Solution lcm没有什么直接做的好方法,用lcm=x*y/gcd转成gcd来做 ...

  6. bzoj千题计划253:bzoj2154: Crash的数字表格

    http://www.lydsy.com/JudgeOnline/problem.php?id=2154 #include<cstdio> #include<algorithm> ...

  7. bzoj2154: Crash的数字表格 莫比乌斯反演

    题意:求\(\sum_{i=1}^n \sum_{j=1}^m\frac{i*j}{gcd(i,j)}\) 题解:\(ans=\sum_{i=1}^n\sum_{j=1}^m \frac{i*j}{g ...

  8. [bzoj2154]Crash的数字表格(mobius反演)

    题意:$\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^m {lcm(i,j)} } $ 解题关键: $\sum\limits_{i = 1}^n {\sum\l ...

  9. 莫比乌斯反演套路三、四--BZOJ2154: Crash的数字表格 && BZOJ2693: jzptab

    t<=1e4个询问每次问n,m<=1e7,$\sum_{1\leqslant x \leqslant n,1 \leqslant y\leqslant m}lcm(x,y)$. 首先题目要 ...

  10. 【BZOJ2154】Crash的数字表格(莫比乌斯反演)

    [BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...

随机推荐

  1. java⑧

    1.switch的表达式取值: byte  short  int  char   Enum(枚举)    jdk1.7版本以上支持 String类型 2. break: 01.代表跳出当前方法体!跳出 ...

  2. 【转载】《Learn More Study Less》整体性学习方法

    原文 忘记在哪里看到这本书的介绍了,据说是一个小子自学1年,完成了4年麻省理工的课程,然后写了一本他学习方法的书.我搜了一下,居然中英文版都有,就花时间好好读了一遍,就是这本. 以下是这本书的完整笔记 ...

  3. pdf及word文档的读取 pyPDF2,docx

    #!python3 #-*- coding:utf8 -*- #PyPDF2可能会打不开某些pdf文档,也不能提取图片,图表或者其他媒介从PDF文件中.但是它能提取文本从PDF中,转化为字符. imp ...

  4. :工厂模式1:方法模式--Pizza

    #ifndef __PIZZA_H__ #define __PIZZA_H__ class Pizza { public: Pizza(){} virtual ~Pizza(){} virtual c ...

  5. Cracking The Coding Interview 1.3

    //原文: // // Design an algorithm and write code to remove the duplicate characters in a string withou ...

  6. DevExpress ASP.NET Bootstrap Controls v18.2新功能详解(二)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress ASP.NET Boot ...

  7. 基于session做的权限控制

    一直听说做权限将登陆信息放在session中,实际也说不太出个所以然来,幸运在工作当中接触到了对应的代码的copy. 实现思路: 类似于粗粒度的权限控制 将权限控制的文件按包分隔好,对应的url前缀也 ...

  8. merge into用法小结

    CREATE OR REPLACE PROCEDURE PRO_ZXC(O_NO OUT NUMBER,O_NOTE OUT NUMBER)ASBEGIN O_NO:=1; MERGE INTO QQ ...

  9. dos命令:window10程序控制命令

    一.A appwiz.cpl::程序和功能 二.C calc:启动计算器 certmgr.msc:证书管理实用程 charmap:启动字符映射表 chkdsk.exe:Chkdsk:磁盘检查(管理员身 ...

  10. setTimeout 与 闭包。。。

    先看下面一个比较坑的代码 for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log(i); }, i*1000 ...