YbtOJ#943-平方约数【莫比乌斯反演,平衡规划】

正题

题目链接:http://www.ybtoj.com.cn/contest/122/problem/3


题目大意

S(i)S(i)S(i)表示iii的约数个数,QQQ次询问给出n,mn,mn,m
∑a=1n∑b=1mS(a2)×S(b2)×S(a×b)\sum_{a=1}^n\sum_{b=1}^mS(a^2)\times S(b^2)\times S(a\times b)a=1nb=1mS(a2)×S(b2)×S(a×b)

1≤Q≤104,1≤n,m≤2×1051\leq Q\leq 10^4,1\leq n,m\leq 2\times 10^51Q104,1n,m2×105


解题思路

前面的推式子挺套路的
首先我们要搞定S(n2)S(n^2)S(n2)这个东西,一个经典的结论就是S(n×m)=∑i∣n∑j∣m[gcd(i,j)=1]S(n\times m)=\sum_{i|n}\sum_{j|m}[gcd(i,j)=1]S(n×m)=injm[gcd(i,j)=1]。莫反一下就有
S(a×b)=∑d∣(a×b)μ(d)∑i×d∣a∑j×d∣b1S(a\times b)=\sum_{d|(a\times b)}\mu(d)\sum_{i\times d|a}\sum_{j\times d|b}1S(a×b)=d(a×b)μ(d)i×daj×db1
所以就有
S(n2)=∑d∣nμ(d)S(nd)2S(n^2)=\sum_{d|n}\mu(d)S(\frac{n}{d})^2S(n2)=dnμ(d)S(dn)2
用线性筛筛出前面的SSS,然后O(nlog⁡n)O(n\log n)O(nlogn)求出h(n)=S(n2)h(n)=S(n^2)h(n)=S(n2)

然后化一下式子
∑a=1n∑b=1mh(a)×h(b)∑i∣a∑j∣b[gcd(i,j)=1]\sum_{a=1}^n\sum_{b=1}^mh(a)\times h(b)\sum_{i|a}\sum_{j|b}[gcd(i,j)=1]a=1nb=1mh(a)×h(b)iajb[gcd(i,j)=1]
∑d=1μ(d)(∑d∣i∑i∣ah(a))(∑d∣j∑j∣bh(b))\sum_{d=1}\mu(d)(\sum_{d|i}\sum_{i|a}h(a))(\sum_{d|j}\sum_{j|b}h(b))d=1μ(d)(diiah(a))(djjbh(b))
∑d=1μ(d)(∑d∣aS(ad)h(a))(∑d∣bS(bd)h(b))\sum_{d=1}\mu(d)(\sum_{d|a}S(\frac{a}{d})h(a))(\sum_{d|b}S(\frac{b}{d})h(b))d=1μ(d)(daS(da)h(a))(dbS(db)h(b))

然后就好像没得化简了,先处理出F(d,n)=∑i=1nh(i×d)S(i)F(d,n)=\sum_{i=1}^nh(i\times d)S(i)F(d,n)=i=1nh(i×d)S(i)

发现ddd很大的时候后面那个东西的取值就很小,但是ddd很多,需要快速处理。

设定一个分界值TTT,每次小于TTT的部分我们就暴力用FFF数组计算,大于TTT的部分我们预处理出一个
G(d,i,j)=∑x=T+1dF(i)F(j)μ(d)G(d,i,j)=\sum_{x=T+1}^dF(i)F(j)\mu(d)G(d,i,j)=x=T+1dF(i)F(j)μ(d)
然后整除分块计算。

这里的kkkN23N^{\frac{2}{3}}N32会平均一些,时间复杂度O(n43+Qn23)O(n^{\frac{4}{3}}+Qn^{\frac{2}{3}})O(n34+Qn32)


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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软智能云三驾马车Azure、Office 365、Dynamics 365齐聚中国

Dynamics 365计划于2019年春落地中国&#xff1b;Windows Server 2019、Office 2019正式商用&#xff1b;SQL Server 2019、Azure Sphere 公开预览&#xff1b;Microsoft Azure 更新数十项云服务与功能&#xff0c;聚焦物联网与边缘。2018年10月25日&#xff0c;上海 —— 2018…

H - Holy Grail

H - Holy Grail 题意&#xff1a; 题干又臭又长 我简单说说 n个点&#xff0c;m条有向边&#xff0c;边权为负&#xff0c;然后给你六组起始点&#xff08;s点和t点&#xff09;&#xff0c;你要在s和t之间建一个有向边&#xff0c;要使得权值最小&#xff0c;问这六组边依次…

【LCT】魔法森林(P2387)

正题 P2387 题目大意 给你一个图&#xff0c;每条边有两个全职a,b&#xff0c;现在让你找一条从1到n的路径使得max(a)max(b)最小 解题思路 对a进行排序&#xff0c;枚举a的最大值&#xff0c;然后取b最小的边&#xff0c;找1到n的最短路径 找最短路径可以用LCT求&#xff0…

ASP.NET Core SignalR中的流式传输

什么是流式传输&#xff1f;流式传输是这一种以稳定持续流的形式传输数据的技术。流式传输的使用场景有些场景中&#xff0c;服务器返回的数据量较大&#xff0c;等待时间较长&#xff0c;客户端不得不等待服务器返回所有数据后&#xff0c;再进行相应的操作。这时候使用流式传…

codeforces1435 D. Shurikens

D. Shurikens 自己感觉差不多写了个模拟过了59组数据。 明显这题可能和栈扯上关系&#xff0c;因为很想括号匹配求卡特兰数的形式 看了大佬博客后发现真的和栈有关于是学习了一波。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) …

YbtOJ#662-交通运输【线段树合并,树状数组】

正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/2 题目大意 给出nnn个点的一棵有根树&#xff0c;对于每个xxx求&#xff0c;删除点xxx后修改某个点的父节点&#xff08;修改前该点必须有父节点&#xff09;后最小化最大联通块大小。 解题思路 删掉一个点后肯定…

EOJ Monthly 2020.9 Sponsored by TuSimple E. 加密的情书

E加密的情书 本人太菜&#xff0c;只会签到 题意&#xff1a; 一个多位数可以通过加密变成个位数&#xff0c;加密方式为&#xff1a;各个位数上的数相加&#xff0c;直到加成个位数 例如&#xff1a; 123 --》 1236 现在给出加密后的一串密文 问是否存在连续的自然数数列 l …

【线段树】Frog Traveler(CF751D)

正题 CF751D 题目大意 现在有n个点&#xff0c;当你在i时&#xff0c;可以向前跳 0∼ai0\sim a_i0∼ai​ 步&#xff0c;跳到j&#xff0c;然后向后走bjb_jbj​步&#xff0c;现在让你从n开始跳&#xff0c;回答跳到0的最少步数 解题思路 设fif_ifi​为跳到i的最少步数&…

独立版Jexus配置SSL,支持https访问

一、申请证书【腾讯免费证书】二、验证DNS&#xff0c;即解析域名。记录类型选择 TXT &#xff0c;主机记录与证书上的主机记录保持一致&#xff0c;记录值也与证书上的记录值保持一致三、等待DNS验证与CA轮询&#xff0c;轮询成功后即可下载证书四、Jexus用到的是Nginx中的证书…

codeforces1437 E. Make It Increasing——最长上升子序列

E. Make It Increasing 首先让aiai−ia_ia_i-iai​ai​−i这样可以是严格单增变成单调增。 参考官方题解 首先不难得出如果我们根据不同修改的位置分割成若干段&#xff0c;那么若干段是互不影响的&#xff0c;我们只需要求出每一个若干段修改次数的最小值。 如果当前考虑l~r…

P4451-[国家集训队]整数的lqp拆分【生成函数,特征方程】

正题 题目链接:https://www.luogu.com.cn/problem/P4451 题目大意 给出nnn&#xff0c;对于所有满足∑i1main\sum_{i1}^ma_in∑i1m​ai​n且∀ai∈N\forall a_i\in N^∀ai​∈N的序列求 ∑m1∞∏i1mFbiai\sum_{m1}^{\infty}\prod_{i1}^mFbi_{a_i}m1∑∞​i1∏m​Fbiai​​ 其…

莫比乌斯反演+例题

参考1 参考2 参考3 问题引入&#xff1a; 入门题 给定N和M和D&#xff0c;求满足1<x<N,1<y<M且gcd(x,y)D的点对(x,y)的个数 1<N,M<1000000 莫比乌斯函数 μ μ(n) 1 , n1 μ(n) (-1)k, np1 * p2 * … * Pk &#xff08;x有奇数个质因子时为-1&#xff…

【线段树】Optimal Insertion(CF751E)

正题 CF751E 题目大意 给你一个数组a和一个集合b&#xff0c;现在让你把b中的数插入a&#xff0c;使得逆序对最少 解题思路 先计算a中的逆序对 对于b和a的逆序对&#xff0c;可以对数字进行排序&#xff0c;用线段树存下放每个位置的最小代价&#xff0c;然后直接求最小值 …

.net core通过多路复用实现单服务百万级别RPS吞吐

多路复用其实并不是什么新技术&#xff0c;它的作用是在一个通讯连接的基础上可以同时进行多个请求响应处理。对于网络通讯来其实不存在这一说法&#xff0c;因为网络层面只负责数据传输&#xff1b;由于上层应用协议的制订问题&#xff0c;导致了很多传统服务并不能支持多路复…

2020 China Collegiate Programming Contest Weihai Site补题部分

A. Golden Spirit 签到题&#xff0c;首先把所有老人带到对岸&#xff0c;然后在对休息讨论一下即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<…

P5110-块速递推【特征方程,分块】

正题 题目链接:https://www.luogu.com.cn/problem/P5110 题目大意 数列aaa满足 an233an−1666an−2,a00,a11a_n233a_{n-1}666a_{n-2},a_00,a_11an​233an−1​666an−2​,a0​0,a1​1 TTT组询问给出nnn求ana_nan​ 1≤T≤51071\leq T\leq 5\times 10^71≤T≤5107&#xff0c;…

I - Washing clothes

题意&#xff1a; 有n个人会在某时间段来洗衣服&#xff0c;但是只有一台洗衣机&#xff0c;当洗衣机被用时其他人只能手洗&#xff0c;手洗时间为y&#xff08;题目给定&#xff09;&#xff0c;洗衣机的时间为x&#xff0c;x∈[1,y]&#xff0c;问当x分别为[1,y]时&#xff…

【LCT】历史(P4338)

正题 P4338 题目大意 有一棵树&#xff0c;告诉你每个点access的次数&#xff08;带修改&#xff09;&#xff0c;问实链切换的最多次数 解题思路 先考虑离线的做法&#xff1a; 对于点 x&#xff0c;其不同儿子的子树access会使实链切换&#xff08;对于点 x access 同理&…

微软官宣:史上最贵开发工具 75亿美金收购GitHub

微软副总裁红衣主教Scott Gu今天的一封邮件结束了这笔软件历史上最大收购案&#xff0c;微软给全球开发人员的开源代码仓库GitHub投入了75亿美金&#xff0c;确保这一平台的持续健康发展。GitHub为啥愿意被收购&#xff1f;“软件工程这个事情&#xff0c;从来就不是一笔好生意…

codeforces1438 E.Yurii Can Do Everything

E.Yurii Can Do Everything 官方题解 按照题解的意思&#xff0c;由于满足此条件的数量不多&#xff0c;因此可以挖掘某些信息进行暴力。 考虑一个good subarray&#xff1a;[al,al1,…,ar−1,ar][a_l,a_{l1},\dots,a_{r-1},a_r][al​,al1​,…,ar−1​,ar​] 按照题目意思满…