[BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)
[BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)
题面
求
\]
分析
\]
\]
\]
(改变求和顺序,先枚举g,i相当于之前的i/g,j相当于j/g,所以gcd(i,j)=1)
\]
令$$f(x)=\sum_{i=1}^{n/g} \sum_{j=1}^{m/g} ij[gcd(i,j)=x]$$
莫比乌斯反演的套路,$$F(x)=\sum_{i=1}^{n/g} \sum_{j=1}^{m/g} ij[x|gcd(i,j)]$$
\(\because x|gcd(i,j),\therefore i|x,j|x\)
\]
用等差数列求和公式可以\(O(1)\)求出,这里为了形式美观先不展开
显然\(F,f\)满足莫比乌斯反演的倍数形式,\(F(n)=\sum_{n|d}f(d)\)
因此\(f(n)=\sum_{n|d} F(d)\mu(\frac{d}{n})\)
我们要求的是\(f(1)\)
\]
\]
\]
看起来时间复杂度是\(O(n^2)\)的,但我们只要线性筛出\(\mu(d)d^2\),两层求和其实都可以数论分块求解,时间复杂度\(O(\sqrt{n}\times \sqrt{n})=O(n)\)
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 10000000
#define mod 20101009//不是1e9+7!!!
using namespace std;
typedef long long ll;
int cnt;
bool vis[maxn+5];
int prime[maxn+5];
int mu[maxn+5];
ll sumg[maxn+5];//g(n)=n*n*mu(n)
void sieve(int n){
mu[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]){
prime[++cnt]=i;
mu[i]=-1;
}
for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0){
mu[i*prime[j]]=0;
break;
}else mu[i*prime[j]]=-mu[i];
}
}
for(int i=1;i<=n;i++) sumg[i]=(sumg[i-1]+(ll)i*i%mod*mu[i]%mod)%mod;
}
inline ll fast_pow(ll x,ll k){
ll ans=1;
while(k){
if(k&1) ans=ans*x%mod;
x=x*x%mod;
k>>=1;
}
return ans;
}
inline ll inv(ll x){
return fast_pow(x,mod-2);
}
ll n,m;
ll inv2;
inline ll S(ll n){
return n*(n+1)%mod*inv2%mod;
}
ll calc(int n,int m){//其实就是f(x)
ll ans=0;
for(int l=1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
ans+=(sumg[r]-sumg[l-1])*S(n/l)%mod*S(m/l)%mod;
ans=(ans+mod)%mod;//注意mu可能为负数
}
return ans;
}
int main(){
sieve(maxn);
inv2=inv(2);
scanf("%lld %lld",&n,&m);
if(n>m) swap(n,m);
ll ans=0;
for(int l=1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
ans+=(ll)(l+r)*(r-l+1)%mod*inv2%mod*calc(n/l,m/l)%mod;
ans=(ans+mod)%mod;
}
printf("%lld\n",ans);
}
[BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)的更多相关文章
- [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)
题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑Ny=1∑Mlim(x, ...
- BZOJ 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
- BZOJ 2154 Crash的数字表格 ——莫比乌斯反演
求$\sum_{i=1}^n\sum_{j=1}^n lcm(i,j)$ 枚举因数 $ans=\sum_{d<=n} F(d) * d$ $F(d)$表示给定范围内两两$\sum_{gcd(i, ...
- 【BZOJ】2154: Crash的数字表格 莫比乌斯反演
[题意]给定n,m,求Σlcm(i,j),1<=i<=n,1<=j<=m,n,m<=10^7. [算法]数论(莫比乌斯反演) [题解] $$ans=\sum_{i\leq ...
- [国家集训队] Crash的数字表格 - 莫比乌斯反演,整除分块
考虑到\(lcm(i,j)=\frac{ij}{gcd(i,j)}\) \(\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\) \(\sum_{d=1}^{n} ...
- 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)
BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...
- Bzoj 2154: Crash的数字表格(积性函数)
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MB Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least ...
- 【刷题】BZOJ 2154 Crash的数字表格
Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...
- 【bzoj2154】Crash的数字表格 莫比乌斯反演
题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如,LCM(6, ...
随机推荐
- 【shell】截取字符串前面文字
例如:有一个文件test.txt,里面有这些数据. meiguounix232 faguounix ribenunix zhongguounixtaobao hanguounixbaba 现在我想截取 ...
- eclipse在线安装ermaster插件
eclipse在线安装ermaster插件: https://www.jianshu.com/p/449fbcd9141a ERMaster的安装和使用 https://www.cnblogs.com ...
- Linux基础教程 linux下查询history操作时间的方法
要在linux操作系统中查看history记录的操作时间,可以按如下步骤实现: 学习linux 1,修改/etc/profile文件,在末尾添加:exporthisttimeformat=”%f %t ...
- mysql COUNT()函数 语法
mysql COUNT()函数 语法 作用:返回匹配指定条件的行数.博智达直线电机平台 语法:SELECT COUNT(*) FROM table_name mysql COUNT()函数 示例 // ...
- LSTM细节
为什么使用tanh? 为了克服梯度消失问题,我们需要一个二阶导数在趋近零点之前能维持很长距离的函数.tanh是具有这种属性的合适的函数. 为什么要使用Sigmoid? 由于Sigmoid函数可以输出0 ...
- YOLO_v1
目标检测算法可以分为两类: 一类是基于region proposal的R-CNN系列算法(R-CNN,Fast R-CNN, Faster R-CNN),它们是two-stage的.要先使用启发式方法 ...
- Android网络技术之WebView常用方法
public class WebViewTest extends Activity { private WebView wv; private EditText et; ...
- 错误 NETSDK1007 找不到“E:\Project\MyProject\MyProject.Common\MyProject.Utility.csproj”的项目信息。这可以指示缺少一个项目引用。 MyProject.Data C:\Program Files\dotnet\sdk\2.2.107\Sdks\Microsoft.NET.Sdk\targets\Microsof
因为对MyProject.Data引用的项目MyProject.Common进行了重命名为MyProject.Utility,导致这个错误 解决办法: 1.找到MyProject.Data中的E:\P ...
- jQuery easyui datagrid 的数据加载
其实easyuidatagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数据:另一种是加载js对象,也就是使用loadDate方法,这种方法用于加载本地js数据(非ur ...
- php 防盗链
防盗链的技术已经很普遍了,有些网站不喜欢自己的图片被别的网站直接复制使用,便使用了防盗链的技术,这样别人在直接复制使用网站图片时,图片便会按照程序的设定不显示或显示防盗链等字样. 使用了防盗链技术,不 ...