P6222-「P6156 简单题」加强版【莫比乌斯反演】

正题

题目链接:https://www.luogu.com.cn/problem/P6222


题目大意

给出kkkTTT组询问给出nnn
∑i=1n∑j=1n(i+j)k×gcd(i,j)×μ(gcd(i,j))2\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\times gcd(i,j)\times \mu(gcd(i,j))^2i=1nj=1n(i+j)k×gcd(i,j)×μ(gcd(i,j))2


解题思路

开始忘记了kkk次幂能线性筛后面全推错了,既然可以线性筛kkk次幂就把gcd(i,j)gcd(i,j)gcd(i,j)提到前面来。
∑d=1nμ(d)2d∑i=1n∑j=1n[gcd(i,j)=d](i+j)k\sum_{d=1}^n\mu(d)^2d\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=d](i+j)^kd=1nμ(d)2di=1nj=1n[gcd(i,j)=d](i+j)k
这里有一个比较巧妙的思路就是,可以把μ(d)2d\mu(d)^2dμ(d)2d提前莫反之后一起套进莫反里。
设有
∑d∣ng(d)=μ(n)2n⇒g(n)=∑d∣nμ(nd)μ(d)2d\sum_{d|n}g(d)=\mu(n)^2n\Rightarrow g(n)=\sum_{d|n}\mu(\frac{n}{d})\mu(d)^2ddng(d)=μ(n)2ng(n)=dnμ(dn)μ(d)2d
然后莫反原式就有一个比较简单的式子了
∑d=1ng(d)dk∑i=1⌊nd⌋∑j=1⌊nd⌋(i+j)k\sum_{d=1}^ng(d)d^k\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}(i+j)^kd=1ng(d)dki=1dnj=1dn(i+j)k
S(n)=∑i=1n∑j=1n(i+j)kS(n)=\sum_{i=1}^n\sum_{j=1}^n(i+j)^kS(n)=i=1nj=1n(i+j)k,这个东西是可以线性预处理的。

先预线性筛+前缀和处理出s(n)=∑i=1niks(n)=\sum_{i=1}^ni^ks(n)=i=1nik,就有S(n)=(∑i=n+12ns(i))−(∑i=1ns(i))S(n)=\left(\sum_{i=n+1}^{2n}s(i)\right)-\left(\sum_{i=1}^ns(i)\right)S(n)=(i=n+12ns(i))(i=1ns(i)),再用一个前缀和就好了。

然后就有式子
∑d=1ng(d)dkS(⌊nd⌋)\sum_{d=1}^ng(d)d^kS(\lfloor\frac{n}{d}\rfloor)d=1ng(d)dkS(dn)
这个知道怎么筛g(d)dkg(d)d^kg(d)dk之后好像就可以O(Tn)O(T\sqrt n)O(Tn)做了?发现ggg里面有个nnn还是很难搞。
然后可以一顿操作把下取整搞掉,设S′(x)=S(x)−S(x−1)S'(x)=S(x)-S(x-1)S(x)=S(x)S(x1),那么就有
∑d=1ng(d)dk∑i=1⌊nd⌋S′(i)\sum_{d=1}^ng(d)d^k\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}S'(i)d=1ng(d)dki=1dnS(i)
然后把iii提出来就有
∑i=1n∑d∣ig(d)dkS′(nd)\sum_{i=1}^n\sum_{d|i}g(d)d^kS'(\frac{n}{d})i=1ndig(d)dkS(dn)
然后就会发现这是两个函数狄利克雷卷积的前缀和?
f(n)=g(n)nk=nk∑d∣nμ(nd)μ(d)2df(n)=g(n)n^k=n^k\sum_{d|n}\mu(\frac{n}{d})\mu(d)^2df(n)=g(n)nk=nkdnμ(dn)μ(d)2d是积性函数,所以我们可以用埃氏筛的方法来快速搞这个东西。

首先我们需要知道对于一个质数pppf(pe)f(p^e)f(pe)如何快速计算。
这里是有结论的

  • e=0e=0e=0f(p0)=f(1)=1f(p^0)=f(1)=1f(p0)=f(1)=1
  • e=1e=1e=1f(p1)=p×(1×μ(1)2μ(p)+p×μ(1)μ(p)2)=p(p−1)f(p^1)=p\times (1\times \mu(1)^2\mu(p)+p\times \mu(1)\mu(p)^2)=p(p-1)f(p1)=p×(1×μ(1)2μ(p)+p×μ(1)μ(p)2)=p(p1)
  • e=2e=2e=2f(p2)=p2×(μ(p2)μ(1)2+μ(p)μ(p)2p+μ(1)μ(p2)2p2)=−p2f(p^2)=p^2\times (\mu(p^2)\mu(1)^2+\mu(p)\mu(p)^2p+\mu(1)\mu(p^2)^2p^2)=-p^2f(p2)=p2×(μ(p2)μ(1)2+μ(p)μ(p)2p+μ(1)μ(p2)2p2)=p2
  • e≥3e\geq 3e3那么若μ(d)≠0\mu(d)\neq0μ(d)=0那么一定有μ(nd)=0\mu(\frac{n}{d})=0μ(dn)=0,所以f(pe)=0f(p^e)=0f(pe)=0

然后就可以开始做了,怎么快速计算狄利克雷卷积?埃氏筛给过我们方法,对于一个积性函数fff,我们可以拆成若干个fpf_pfp满足
fp(x)=[pe=x]f(x)(p∈Pri)f_p(x)=[p^e=x]f(x)\ \ (p\in Pri)fp(x)=[pe=x]f(x)  (pPri)
PriPriPri是质数集)

然后有f=∏p∈Prifpf=\prod_{p\in Pri}f_pf=pPrifp(乘法表示狄利克雷积)

所以把所有的fpf_pfp乘到S′S'S里去就好了,这个是枚举所有质数的倍数来搞的,时间复杂度O(nlog⁡log⁡n)O(n\log \log n)O(nloglogn)

所以总共的时间复杂度就是O(T+nlog⁡log⁡n)O(T+n\log \log n)O(T+nloglogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define uit unsigned int
using namespace std;
const int N=2e7+10;
int t,n,k,cnt;
uit pri[N],pw[N],s[N];
bool v[N];
uit power(uit x,int b){uit ans=1;while(b){if(b&1)ans=ans*x;x=x*x;b>>=1;}return ans;
}
void init(){s[1]=1;for(int i=2;i<=n*2;i++){if(!v[i])pri[++cnt]=i,s[i]=power(i,k);for(int j=1;j<=cnt&&i*pri[j]<=n*2;j++){v[i*pri[j]]=1;s[i*pri[j]]=s[i]*s[pri[j]];if(i%pri[j]==0)break;}}for(int i=1;i<=n*2;i++)pw[i]=s[i],s[i]=s[i-1]+s[i];for(int i=1;i<=n;i++)s[i]=s[i*2]+s[i*2-1]-s[i]*2;for(int j=1;j<=cnt&&pri[j]<=n;j++)for(int x=pri[j],i=n/x;i>=1;i--){s[i*x]+=s[i]*(x-1)*pw[x];if(i%x==0)s[i*x]-=s[i/x]*x*pw[x]*pw[x];}for(int i=1;i<=n;i++)s[i]+=s[i-1];return;
}
int main()
{scanf("%d%d%d",&t,&n,&k);init();while(t--){scanf("%d",&n);printf("%u\n",s[n]);}return 0;
}

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

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

相关文章

Codeforces Round #664 (Div. 2)

写了三个题结果C fst了O.0 A - Boboniu Likes to Color Balls 回文串&#xff0c;最多有球是一个奇数个。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<cstdio> #include<iostream> #include<algorithm> using namespace std…

2020 年百度之星·程序设计大赛 - 初赛一

2020 年百度之星程序设计大赛 - 初赛一 [toc] 6743 Drink 题解&#xff1a; 每一种饮料求一个卡路里&#xff0c;取最小值 第一看以为是背包&#xff0c;其实出题人在第二层 代码&#xff1a; #include<iostream> #include<cstdio> #include<string> #i…

.Net Core应用框架Util介绍(四)

上篇介绍了Util Angular Demo的目录结构和运行机制&#xff0c;本文介绍Util封装Angular的基本手法及背后的动机。Angular应用由Ts和Html两部分构成&#xff0c;本文介绍第一部分。Angular Ts的封装Ts是Angular的代码部分&#xff0c;用于编写页面逻辑。依赖注入( Dependency I…

【AC自动机】AC自动机(二次加强版)(luogu 5357)

正题 luogu 5357 题目大意 给你若干单词和一个字符串&#xff0c;让你查询每个单词在字符串中出现的次数 解题思路 AC自动机模板 先把单词丢进去&#xff0c;然后拿字符串去跑&#xff0c;每到一个点累计答案 因为数据较大&#xff0c;所以要先存起来&#xff0c;跑完后按…

Educational Codeforces Round 93 (Rated for Div. 2)

A - Bad Triangle 选出三个序列使之不能组成三角形。先把差距最大的选了&#xff0c;枚举中间值。两边之和不大于第三边。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; const i…

P4198-楼房重建【线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P4198 题目大意 nnn条线&#xff0c;开始时第iii条是(i,0)(i,0)(i,0)的一个点。 每次有操作把第xxx条线变成(x,0)(x,0)(x,0)到(x,y)(x,y)(x,y)。然后求从(0,0)(0,0)(0,0)能看到几条线。 解题思路 把线变成斜率的话就是对于每…

2020牛客暑期多校训练营(第四场)

2020牛客暑期多校训练营&#xff08;第四场&#xff09; 这场属实有点难受 文章目录A Ancient DistanceB Basic Gcd Problem题目代码&#xff1a;C Count New StringD Dividing StringsE EliminateF Finding the Order题意&#xff1a;题解&#xff1a;代码&#xff1a;G Geome…

《C# 程序员的自我修养》送书活动结果公布

截止到9月28日24&#xff1a;00 &#xff0c;本次送书活动《C# 程序员的自我修养》共收到150多位同学参与回复。以下5位同学将获赠书籍一本&#xff1a;夏树、Damon、水墨清华、天天、kang以上同学请加小二微信领取赠书小二微信&#xff1a;geffzhang.NET社区新闻&#xff0c;深…

【AC自动机】单词(luogu 3966/ybtoj AC自动机-2)

正题 luogu 3966 ybtoj AC自动机-2 题目大意 给你n个单词&#xff0c;让你查询这写单词分别在这n个单词中出现过多少次 解题思路 先用AC自动机建好图&#xff0c;然后每个点的权值为1&#xff0c;然后向nx传递 代码 #include<cstdio> #include<cstring> #inclu…

AtCoder Beginner Contest 175总结

这次做了ABCE~ A - Rainy Season 懒得想直接分类讨论 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<string> #include<iostream> using namespace std; int main() {string s;cin>>s;int res0;if(s[0]R&&s[1]R&&a…

P5607-[Ynoi2013]无力回天NOI2017【线性基,线段树,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P5607 题目大意 nnn个数字的序列&#xff0c;mmm次操作 区间[l,r][l,r][l,r]异或上一个值vvv询问区间[l,r][l,r][l,r]中选出一些数来异或的最大异或和 解题思路 最大异或和的话只能是线性基了&#xff0c;但是线性基的区间修…

牛客算法周周练15

牛客算法周周练15 文章目录A 数列下标B 可持久化动态图上树状数组维护01背包C 璀璨光滑D 树上求和E 算式子A 数列下标 题意很明确&#xff0c;再看看数据&#xff0c;所以我们直接两重循环&#xff0c;用数组b来记录右边第一个大的数的下标 代码&#xff1a; #include<bit…

使用 dotTrace 分析 .NET Core 代码问题

0.背景在项目开发之中&#xff0c;前期可能主要以保证任务完成为主&#xff0c;对于性能优化主要在于开发完成之后再来进行。可能在测试的时候发现部分接口的代码执行时间过长&#xff0c;但是又毫无头绪&#xff0c;这个时候你就需要性能分析工具来协助你排查问题了。常规性能…

【AC自动机】前缀匹配(ybtoj AC自动机-3)

正题 ybtoj AC自动机-3 题目大意 给你一个字符串和若干匹配串&#xff0c;问你匹配串的前缀和字符串的最大匹配 解题思路 先把所有匹配串丢进AC自动机&#xff0c;然后拿字符串去跑 每次只在当前位置存下贡献&#xff0c;然后按bfs的倒叙传递贡献&#xff0c;最后再倒着跑每…

Codeforces Global Round 10

这种大场全是神仙打架&#xff0c;向我这种菜菜就是掉分www太难了 神仙打架&#xff0c;百姓遭殃。 A - Omkar and Password 分析可以知道&#xff0c;只要数组元素不是全部相等答案就是1&#xff0c;如何数组元素全部相等答案就是n。 #define IO ios::sync_with_stdio(fals…

【每日一题】7月17日题目精讲—BOWL 碗的叠放

【每日一题】7月17日题目精讲—BOWL 碗的叠放 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 小H有n个碗需要放进橱柜&#xff0c;她希望将他们叠起来放置。你知道每个碗都…

基于Ocelot的gRpcHttp网关

什么是gRpcHttp网关通俗的讲就是将gRpc提供的服务以rest api的形式提供出去&#xff0c;不需要再单独的写一个webapi去做这件事。gRpcHttp网关好处减少不必要代码&#xff0c;减少中间层提高通讯效率。以前可能是这样用了gRpc网关后是这样gRpcHttp网关提供哪些功能可以直接加载…

CF917D-Stranger Trees【矩阵树定理,高斯消元】

正题 题目链接:https://www.luogu.com.cn/problem/CF917D 题目大意 给出nnn个点的一棵树&#xff0c;对于每个kkk求有多少个nnn个点的树满足与给出的树恰好有kkk条边重合。 解题思路 矩阵树有一个统计所有树边权和的和用法&#xff0c;就是把变量变成一个形如wx1wx1wx1的多项…

【AC自动机】屏蔽词删除(ybtoj AC自动机-4)

正题 ybtoj AC自动机-4 题目大意 有一个字符串和若干要删除的串&#xff08;不存在包含关系&#xff09;&#xff0c;每次从前往后搜&#xff0c;搜到第一个要删除的串然后删掉&#xff0c;再从0开始搜 问你最后得到的字符串 解题思路 先把所有删除串丢进AC自动机中&#x…

Codeforces Round #665 (Div. 2)

2020/8/21 晚上打完球就22:10了&#xff0c;愣是没报上名&#xff08;cf打不开&#xff0c;然后就做了一下赛后交的过了3个题 A - Distance and Axis 数学题分类讨论一下即可 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #inclu…