【莫比乌斯反演】BZOJ2154 Crash的数字表格
Description
求sigma lcm(x,y),x<=n,y<=m。n,m<=1e7。
Solution
lcm没有什么直接做的好方法,用lcm=x*y/gcd转成gcd来做
就是要求sigma d*f(x/d,y/d)
f(x,y)为x和y以内gcd正好为1的对数
F为所有对数,于是有F(x,y)=x*(x+1)/2*y*(y+1)/2
f(x,y)=sigma (1<=i<=x) i*i*mu(i)*F(x/i,y/i)
f用莫比乌斯反演解决,这两个式子都套上分块优化到sqrt,于是总复杂度sqrt*sqrt=n
分块优化具体可以见上一篇blog
Code
一开始全开LL MLE了一发
然后又WA了两发,第一次是有一地方算的时候溢出
一开始为了避免MLE把prime数组/50,但其实只能/20的样子
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=1e7+,mod=; bool flag[maxn];
int prime[maxn],mu[maxn],cnt;
int sum[maxn],s[maxn];
int n,m; void getmu(){
mu[]=;
for(int i=;i<=n;i++){
if(!flag[i]){
mu[i]=-;
prime[++cnt]=i;
}
for(int j=;i*prime[j]<=n&&j<=cnt;j++){
flag[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
for(int i=;i<=n;i++)
sum[i]=(sum[i-]+(ll)i*i*mu[i]%mod)%mod;
} ll F(int x,int y){
return (ll)((ll)x*(x+)/%mod)*((ll)y*(y+)/%mod)%mod;
} ll f(int x,int y){
ll ret=;
int p;
for(int i=;i<=x;i=p+){
p=min(x/(x/i),y/(y/i));
ret=(ret+(ll)(sum[p]-sum[i-])*F(x/i,y/i))%mod;
}
return ret;
} int main(){
scanf("%d%d",&n,&m);
if(n>m) swap(n,m);
for(int i=;i<=n;i++) s[i]=(s[i-]+i)%mod;
getmu(); int pos;
ll ans=;
for(int i=;i<=n;i=pos+){
pos=min(n/(n/i),m/(m/i));
ans=(ans+(ll)(s[pos]-s[i-])*f(n/i,m/i))%mod;
}
printf("%lld\n",(ans+mod)%mod);
return ;
}
【莫比乌斯反演】BZOJ2154 Crash的数字表格的更多相关文章
- BZOJ2154 Crash的数字表格 【莫比乌斯反演】
BZOJ2154 Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b) ...
- Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)
题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...
- BZOJ2154: Crash的数字表格 & BZOJ2693: jzptab
[传送门:BZOJ2154&BZOJ2693] 简要题意: 给出n,m,求$\sum_{i=1}^{n}\sum_{j=1}^{m}LCM(i,j)$ 题解: 莫比乌斯反演(因为BZOJ269 ...
- 莫比乌斯反演套路三、四--BZOJ2154: Crash的数字表格 && BZOJ2693: jzptab
t<=1e4个询问每次问n,m<=1e7,$\sum_{1\leqslant x \leqslant n,1 \leqslant y\leqslant m}lcm(x,y)$. 首先题目要 ...
- 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 ...
- [bzoj2154]Crash的数字表格(mobius反演)
题意:$\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^m {lcm(i,j)} } $ 解题关键: $\sum\limits_{i = 1}^n {\sum\l ...
- BZOJ2154: Crash的数字表格
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2154 题意&&题解:http://www.cnblogs.com/jiangl ...
- bzoj千题计划253:bzoj2154: Crash的数字表格
http://www.lydsy.com/JudgeOnline/problem.php?id=2154 #include<cstdio> #include<algorithm> ...
- 【BZOJ2154】Crash的数字表格(莫比乌斯反演)
[BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...
随机推荐
- 2018国赛 - Writeup(待补充)
10.0.0.55 Writeup Web 0x01 easyweb 解题思路 题目很脑洞 用户名admin 密码123456进去可得到flag(密码现在换了) 解题脚本 无 Reverse 0x02 ...
- Spring Boot 2.0.1 入门教程
简介 Spring Boot是Spring提供的一套基础配置环境,可以用来快速开发生产环境级别的产品.尤其适合开发微服务架构,省去了不少配置麻烦.比如用到Spring MVC时,只需把spring-b ...
- 02_Linux学习_命令
帮助命令: xxx --help man xxx 列出当前目录下的目录和文件: ls ls -l ls --help ...
- js 读取xml文件
读取xml文件 [原创 2007-6-20 17:35:37] 字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script> ...
- 分布式文件系统MFS、Ceph、GlusterFS、Lustre的比较
原文:http://blog.csdn.net/metaxen/article/details/7108958 MooseFS(MFS) Ceph GlusterFS Lustre Metadata ...
- Mysql 快速指南
Mysql 快速指南 本文的示例在 Mysql 5.7 下都可以测试通过. 知识点 概念 数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件). 数据表(table):某种特 ...
- 如何优雅的关闭Java线程池
面试中经常会问到,创建一个线程池需要哪些参数啊,线程池的工作原理啊,却很少会问到线程池如何安全关闭的. 也正是因为大家不是很关注这块,即便是工作三四年的人,也会有因为线程池关闭不合理,导致应用无法正常 ...
- php获取指定目录下的所有文件列表
在我们实际的开发需求中,经常用到操作文件,今天就讲一下关于获取指定目录下的所有文件的几种常用方法: 1.scandir()函数 scandir() 函数返回指定目录中的文件和目录的数组. scandi ...
- 用Java制作一个简单的图片验证码
//Java实现简单验证码功能 package project; import java.awt.Color; import java.awt.Font;import java.awt.Graphic ...
- 【踩坑】iconfont使用异常bug
你见过html页面上'x'字符变成打印机图标么?一般人应该没有. -----------------------诡异bug----------------------- 今天测试报了一个bug,说页面 ...