P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

除了最后一题都比较简单就写一起了


P4450-双亲数

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

题目大意

给出A,B,dA,B,dA,B,d求有多少对(a,b)(a,b)(a,b)满足gcd(a,b)=dgcd(a,b)=dgcd(a,b)=da∈[1,A],b∈[1,B]a\in[1,A],b\in[1,B]a[1,A],b[1,B]

解题思路

很显然的容斥,枚举ddd的倍数iii,然后容斥系数就是μ(id)\mu(\frac{i}{d})μ(di)
时间复杂度O(n)O(n)O(n)

code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int A,B,d,mu[N],pri[N],cnt;
long long ans;
bool v[N];
int main()
{scanf("%d%d%d",&A,&B,&d);mu[1]=1;for(int i=2;i<N;i++){if(!v[i])pri[++cnt]=i,mu[i]=-1;for(int j=1;j<=cnt&&i*pri[j]<N;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break;mu[i*pri[j]]=-mu[i];}}if(A>B)swap(A,B);for(int i=d;i<=A;i+=d)ans+=1ll*(A/i)*(B/i)*mu[i/d];printf("%lld\n",ans);
}

P5221-Product

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

题目大意

给出nnn
∏i=1n∏j=1nlcm(i,j)gcd(i,j)\prod_{i=1}^n\prod_{j=1}^n\frac{lcm(i,j)}{gcd(i,j)}i=1nj=1ngcd(i,j)lcm(i,j)

解题思路

CYJian\text{CYJian}CYJian的题啊,时限0.2s?0.2s?0.2s?不过只是看起来花里胡哨,没有其他CYJian\text{CYJian}CYJian的题那么难。

先简单把lcmlcmlcm拆出来化一下式子
(∏i=1n∏j=1ni×j)1(∏i=1n∏j=1ngcd(i,j))2\left(\prod_{i=1}^n\prod_{j=1}^ni\times j\right)\frac{1}{\left(\prod_{i=1}^{n}\prod_{j=1}^ngcd(i,j)\right)^2}(i=1nj=1ni×j)(i=1nj=1ngcd(i,j))21

左边那个很容易求就是(n!)2n(n!)^{2n}(n!)2n,右边那个因为是乘积所以很好做,直接枚举质数幂ded^ede,让有⌊nde⌋2\lfloor\frac{n}{d^e}\rfloor^2den2对数的gcdgcdgcd包含ded^ede,会产生这么多的贡献,但是因为在de−1d^{e-1}de1的时候也统计过一次,所以只需要产生ddd的贡献就好了。

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)

code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e6+10,P=104857601;
ll n,ans,cnt,pri[N];
bool v[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
signed main()
{scanf("%lld",&n);ans=1;for(ll i=2;i<=n;i++){if(!v[i]){for(ll j=i;j<=n;j=j*i)ans=ans*power(i,(n/j)*(n/j)%(P-1))%P;pri[++cnt]=i;}for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break;}}ans=power(ans*ans%P,P-2);ll f=1;for(ll i=1;i<=n;i++)f=f*i%P;f=power(f,2*n);ans=ans*f%P;printf("%lld",ans);return 0;
}

P6055-[RC-02]GCD

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

题目大意

给出nnn
∑i=1n∑j=1n∑p=1⌊nj⌋∑q=1⌊nj⌋[gcd(i,j)=1][gcd(p,q)=1]\sum_{i=1}^n\sum_{j=1}^n\sum_{p=1}^{\lfloor\frac{n}{j}\rfloor}\sum_{q=1}^{\lfloor\frac{n}{j}\rfloor}[gcd(i,j)=1][gcd(p,q)=1]i=1nj=1np=1jnq=1jn[gcd(i,j)=1][gcd(p,q)=1]

解题思路

刚开始还以为可以直接暴力整除分块+杜教筛欧拉函数然后O(n34)O(n^{\frac{3}{4}})O(n43)搞,然后发现时限是1s1s1s

发现这个式子的顺序很奇怪,特意的把jjj放在了里面。这个提示我们jjj其实是在枚举pppqqqgcdgcdgcd
而又jjjiii互质,其实这个式子的真正目的是对于每个iii求有多少对数的gcdgcdgcdiii互质然后求和。换成式子就是
∑i=1n∑q=1n∑p=1n[gcd(gcd(q,p),i)=1]\sum_{i=1}^n\sum_{q=1}^n\sum_{p=1}^n[gcd(gcd(q,p),i)=1]i=1nq=1np=1n[gcd(gcd(q,p),i)=1]
就是三对数之间互质的对数,之间上莫反就可以了
∑i=1n⌊ni⌋3μ(i)\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor^3\mu(i)i=1nin3μ(i)
nnn比较大,要用杜教筛筛一下mumumu

时间复杂度O(n23)O(n^{\frac{2}{3}})O(n32)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
const ll N=1e7+10,P=998244353;
ll n,cnt,pri[N],mu[N],ans;
map<ll,ll> mp;
bool v[N];
ll get_sum(ll n){if(mp.find(n)!=mp.end())return mp[n];if(n<N)return mu[n];ll rest=1;for(ll l=2,r;l<=n;l=r+1)r=n/(n/l),(rest+=P-(r-l+1)*get_sum(n/l))%=P;return mp[n]=rest;
}
signed main()
{scanf("%lld",&n);mu[1]=1;for(ll i=2;i<N;i++){if(!v[i])pri[++cnt]=i,mu[i]=-1;for(ll j=1;j<=cnt&&i*pri[j]<N;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break;mu[i*pri[j]]=-mu[i];}}for(ll i=1;i<N;i++)(mu[i]+=mu[i-1])%=P;for(ll l=1,r;l<=n;l=r+1){r=n/(n/l);ll p=n/l;p=p*p%P*p%P;(ans+=p*(get_sum(r)-get_sum(l-1))%P)%=P;}printf("%lld\n",(ans+P)%P);return 0;
}

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

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

相关文章

【Trie】最大异或对(ybtoj Trie-2)

正题 ybtoj Trie-2 题目大意 给你n个数&#xff0c;选择2个&#xff0c;使其异或值最大 解题思路 对于每个数的二进制建立Trie&#xff0c;然后每个数在Trie中搜索&#xff0c;每次尽量走不同方向 代码 #include<cstdio> #include<cstring> #include<iostrea…

[SCOI2003]字符串折叠

[SCOI2003]字符串折叠 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 折叠的定义如下&#xff1a; 一个字符串可以看成它自身的折叠。记作S S X(S)是X(X>1)个S连接在一…

Codeforces Round #662 (Div. 2)

就写了两个题&#xff0c;以为要掉分&#xff0c;结果早上起来发现还上分了&#xff08;说明wtcl A - Rainbow Dash, Fluttershy and Chess Coloring 无论边长是奇数还是偶数&#xff0c;考虑每次操作最外层的一圈&#xff0c;一个人操作一圈的一般&#xff0c;然后另一个人就…

.NET微服务方案调查

.NET Core就是专门针对模块化的微服务架构而设计&#xff0c;调查下大家选择.NET微服务情况&#xff0c;如果你有微服务方面的需求可以找我哦&#xff0c;可加我微信geffzhang&#xff1a;相关文章&#xff1a;Service Fabric 与Ocelot 的集成Ocelot简易教程&#xff08;二&…

Loj#116-[模板]有源汇有上下界最大流

正题 题目链接:https://loj.ac/p/116 题目大意 nnn个点mmm条边的一张图&#xff0c;每条边有流量上下限制&#xff0c;求源点到汇点的最大流。 解题思路 先别急着求上面那个&#xff0c;考虑一下怎么求无源点汇点的上下界可行流。 可以考虑先把下限流满&#xff0c;这样就会…

【Trie】最长异或路径(ybtoj Trie-3/luogu 4551)

正题 ybtoj Trie-3 luogu 4551 题目大意 给你一棵树&#xff0c;让你找一条路径&#xff0c;使这条路径的亦或值最大 解题思路 对于每个数存下到根节点的亦或值&#xff0c;然后拿这些数去Trie中跑最大亦或 因为相同部分亦或后为0&#xff0c;所以得出结果就是最大路径亦或…

Codeforces Round #663 (Div. 2)

2020/8/9晚上断网了&#xff0c;本来不想打就顺便看看题目&#xff0c;发现能做几个&#xff0c;然后就交了。&#xff08;做完1、2两题才敢交&#xff09;最终做了3个题tcl。 A - Suborrays 脑筋急转弯题目。位运算OR运算结果只会变大不会变小&#xff0c;直接正序输出就可 …

【每日一题】7月16日题目精讲—点权和

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 给你一棵树&#xff0c;最开始点权为0&#xff0c;每次将与一个点x树上距离<1的所…

中国开源年会 COSCon 2018 今起接受报名!

大会官网二维码名片&#xff1a;点击文末左下角阅读原文&#xff0c;直达报名链接写在大会前开源 20 年&#xff0c;我们遇到了什么问题&#xff1f;‍围绕开源的方式来开发软件项目&#xff0c;正在走向业界的主流。随着开源的崛起&#xff0c;相应的问题也来了&#xff1a;Re…

【Trie】阅读理解(luogu 3879/ybtoj Trie-4)

正题 luogu 3879 ybtoj Trie-4 题目大意 给你n篇文章&#xff0c;还有m个单词&#xff0c;问你这些单词在哪几篇文章中出现过 解题思路 对文章中的单词建Trie&#xff0c;然后那查询的单词去匹配 代码 #include<map> #include<vector> #include<cstdio> …

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

正题 题目链接:https://www.luogu.com.cn/problem/P6222 题目大意 给出kkk&#xff0c;TTT组询问给出nnn求 ∑i1n∑j1n(ij)kgcd(i,j)μ(gcd(i,j))2\sum_{i1}^n\sum_{j1}^n(ij)^k\times gcd(i,j)\times \mu(gcd(i,j))^2i1∑n​j1∑n​(ij)kgcd(i,j)μ(gcd(i,j))2 解题思路 开…

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…