YbtOJ#943-平方约数【莫比乌斯反演,平衡规划】
正题
题目链接:http://www.ybtoj.com.cn/contest/122/problem/3
题目大意
\(S(i)\)表示\(i\)的约数个数,\(Q\)次询问给出\(n,m\)求
\]
\(1\leq Q\leq 10^4,1\leq n,m\leq 2\times 10^5\)
解题思路
前面的推式子挺套路的
首先我们要搞定\(S(n^2)\)这个东西,一个经典的结论就是\(S(n\times m)=\sum_{i|n}\sum_{j|m}[gcd(i,j)=1]\)。莫反一下就有
\]
所以就有
\]
用线性筛筛出前面的\(S\),然后\(O(n\log n)\)求出\(h(n)=S(n^2)\)
然后化一下式子
\]
\]
\]
然后就好像没得化简了,先处理出\(F(d,n)=\sum_{i=1}^nh(i\times d)S(i)\)
发现\(d\)很大的时候后面那个东西的取值就很小,但是\(d\)很多,需要快速处理。
设定一个分界值\(T\),每次小于\(T\)的部分我们就暴力用\(F\)数组计算,大于\(T\)的部分我们预处理出一个
\]
然后整除分块计算。
这里的\(k\)取\(N^{\frac{2}{3}}\)会平均一些,时间复杂度\(O(n^{\frac{4}{3}}+Qn^{\frac{2}{3}})\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define ll long long
using namespace std;
const ll N=2e5+10,P=1<<30;
ll q,n,m,cnt,pri[N],mu[N],S[N],sg[N],g[N],o[N];
vector<int>f[N],d[N];
bool v[N];
void prime(){
mu[1]=sg[1]=1;
for(ll i=2;i<N;i++){
if(!v[i])pri[++cnt]=i,mu[i]=-1,g[i]=2,sg[i]=2;
for(ll j=1;j<=cnt&&i*pri[j]<N;j++){
v[i*pri[j]]=1;
if(i%pri[j]==0){
g[i*pri[j]]=g[i]+1;
sg[i*pri[j]]=sg[i]/g[i]*g[i*pri[j]];
break;
}
mu[i*pri[j]]=-mu[i];g[i*pri[j]]=2;
sg[i*pri[j]]=sg[i]*sg[pri[j]];
}
}
for(ll i=1;i<N;i++)
for(ll j=i;j<N;j+=i)
(S[j]+=sg[j/i]*sg[j/i]*mu[i]%P)%=P;
return;
}
signed main()
{
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
prime();
scanf("%lld",&q);ll lim=2e5;
ll T=(ll)pow(lim,2.0/3.0)+1;
f[0].resize(lim+1);
for(ll i=1;i<=lim;i++){
f[i].push_back(0);
for(ll j=1;j<=lim/i;j++){
ll tmp=f[i][j-1];
f[i].push_back((tmp+S[i*j]*sg[j])%P);
}
}
d[T].resize((lim/T)*(lim/T)+1);
for(ll i=T+1;i<=lim;i++){
ll p=lim/i;
d[i].resize(p*p+1);
for(ll j=1,sum=0;j<=lim/i;j++)
for(ll k=j;k<=lim/i;k++)
d[i][(j-1)*p+k]=(d[i-1][(j-1)*o[i-1]+k]+f[i][j]*f[i][k]*mu[i])%P;
o[i]=p;
}
while(q--){
scanf("%lld%lld",&n,&m);
if(n>m)swap(n,m);ll ans=0;
for(ll i=1;i<=min(T,n);i++)
(ans+=1ll*f[i][n/i]*f[i][m/i]*mu[i]%P)%=P;
for(ll l=T+1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
(ans+=d[r][(n/l-1)*o[r]+m/l]-d[l-1][(n/l-1)*o[l-1]+m/l])%=P;
}
printf("%lld\n",(ans+P)%P);
}
return 0;
}
YbtOJ#943-平方约数【莫比乌斯反演,平衡规划】的更多相关文章
- P4240-毒瘤之神的考验【莫比乌斯反演,平衡规划】
正题 题目链接:https://www.luogu.com.cn/problem/P4240 题目大意 \(Q\)组数据给出\(n,m\)求 \[\sum_{i=1}^n\sum_{j=1}^m\va ...
- 【BZOJ3994】约数个数和(莫比乌斯反演)
[BZOJ3994]约数个数和(莫比乌斯反演) 题面 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] 多组数据\((<=50000组)\) \(n,m<=50000\ ...
- BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演
BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...
- 【BZOJ3994】[SDOI2015] 约数个数和(莫比乌斯反演)
点此看题面 大致题意: 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^N\sum_{j=1}^Md(i·j)\). 莫比乌斯反演 这是一道莫比乌斯反演题. 一个重要的性质 首先 ...
- 洛谷P3327 [SDOI2015]约数个数和 【莫比乌斯反演】
题目 设d(x)为x的约数个数,给定N.M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 输入格式 输入文件包含多组测试数据.第一行,一个整数T,表示测试数 ...
- P3327 [SDOI2015]约数个数和 莫比乌斯反演
P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...
- [SDOI2015][bzoj 3994][Luogu P3327] 约数个数和 (莫比乌斯反演)
题目描述 设d(x)d(x)d(x)为xxx的约数个数,给定NNN.MMM,求 ∑i=1N∑j=1Md(ij)\sum^{N}_{i=1}\sum^{M}_{j=1} d(ij)i=1∑Nj=1∑M ...
- 51nod 1584 加权约数和 约数和函数小trick 莫比乌斯反演
LINK:加权约数和 我曾经一度认为莫比乌斯反演都是板子题. 做过这道题我认输了 不是什么东西都是板子. 一个trick 设\(s(x)\)为x的约数和函数. 有 \(s(i\cdot j)=\sum ...
- BZOJ 3994: [SDOI2015]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...
随机推荐
- 无法加载文件 E:\PROGRAM FILES\NODEJS\NODE_GLOBAL\yarn.ps1,因为在此系统中禁止执行脚本
参考: npm : 无法加载文件 C:\Program Files\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本.
- webGis概念
参考:https://blog.csdn.net/qq_36375770/article/details/80077533 参考:https://blog.csdn.net/BuquTianya/ar ...
- jdbc获取PreparedStatement最终执行的sql语句
//直接打印PreparedStatement对象 System.out.println(ps); 输出结果: com.mysql.jdbc.JDBC42PreparedStatement@5f205 ...
- 这样设计 Java 异常更优雅
转自:lrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的开发经 ...
- Linux基础——安装以及常用命令
Linux基础--常用命令 1.安装Vmware 进入VMware官网: https://www.vmware.com/cn.html下载安装 镜像推荐网址下载:https://www.linux. ...
- MySQL-SQL基础-查询2
mysql> create table customer(mid char(5) primary key,th date,sex char(1) default '0'); Query OK, ...
- Swift-Button 的 highlighted(高亮)
摘要 在学习小程序时,看到小程序中的一个样式属性 hover-class,通过设置这个属性,就可以给点击的控件添加一个高亮效果.所以也就萌生了在 Swift 也实现一个类似的功能的想法,开干. 下面代 ...
- Windows系统一些好用的办公工具
在日常办公过程中,总有一些工具令人觉得方便,提高了工作效率.以下是根据我的习惯,收集了一些好用的工具,在此记录且不定期更新. 文件名 说明 Everything 文件搜索工具,搜索速度快 ALTRun ...
- zabbix告警推送至个人微信
文章原文 自从接触zabbix后,就一直想着怎么才能把告警推送到个人微信上.有这样的想法主要是个人微信的使用频率远远要比钉钉,企业微信,邮箱,飞书等使用频率要高.比如我,就遇到过在周末的时候,因为没有 ...
- 解决方案-问题001:物理机、虚机等等Linux操作系统/usr/bin目录权限误操作,导致无法切换root
导语:平常运维人员会误操作一些目录权限,导致一些问题,那么如何恢复呢? 问题:物理机.虚机等等Linux操作系统/usr/bin目录权限误操作,导致无法切换root? 实验环境: ip地址 是否目录正 ...