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


P4450-双亲数

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

题目大意

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

解题思路

很显然的容斥,枚举\(d\)的倍数\(i\),然后容斥系数就是\(\mu(\frac{i}{d})\)。

时间复杂度\(O(n)\)

code

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int N=1e6+10;
  6. int A,B,d,mu[N],pri[N],cnt;
  7. long long ans;
  8. bool v[N];
  9. int main()
  10. {
  11. scanf("%d%d%d",&A,&B,&d);
  12. mu[1]=1;
  13. for(int i=2;i<N;i++){
  14. if(!v[i])pri[++cnt]=i,mu[i]=-1;
  15. for(int j=1;j<=cnt&&i*pri[j]<N;j++){
  16. v[i*pri[j]]=1;
  17. if(i%pri[j]==0)break;
  18. mu[i*pri[j]]=-mu[i];
  19. }
  20. }
  21. if(A>B)swap(A,B);
  22. for(int i=d;i<=A;i+=d)
  23. ans+=1ll*(A/i)*(B/i)*mu[i/d];
  24. printf("%lld\n",ans);
  25. }

P5221-Product

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

题目大意

给出\(n\)求

\[\prod_{i=1}^n\prod_{j=1}^n\frac{lcm(i,j)}{gcd(i,j)}
\]

解题思路

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

先简单把\(lcm\)拆出来化一下式子

\[\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}
\]

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

时间复杂度\(O(n\log n)\)

code

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define ll long long
  5. using namespace std;
  6. const ll N=1e6+10,P=104857601;
  7. ll n,ans,cnt,pri[N];
  8. bool v[N];
  9. ll power(ll x,ll b){
  10. ll ans=1;
  11. while(b){
  12. if(b&1)ans=ans*x%P;
  13. x=x*x%P;b>>=1;
  14. }
  15. return ans;
  16. }
  17. signed main()
  18. {
  19. scanf("%lld",&n);ans=1;
  20. for(ll i=2;i<=n;i++){
  21. if(!v[i]){
  22. for(ll j=i;j<=n;j=j*i)
  23. ans=ans*power(i,(n/j)*(n/j)%(P-1))%P;
  24. pri[++cnt]=i;
  25. }
  26. for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){
  27. v[i*pri[j]]=1;
  28. if(i%pri[j]==0)break;
  29. }
  30. }
  31. ans=power(ans*ans%P,P-2);
  32. ll f=1;
  33. for(ll i=1;i<=n;i++)f=f*i%P;
  34. f=power(f,2*n);ans=ans*f%P;
  35. printf("%lld",ans);
  36. return 0;
  37. }

P6055-[RC-02]GCD

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

题目大意

给出\(n\)求

\[\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]
\]

解题思路

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

发现这个式子的顺序很奇怪,特意的把\(j\)放在了里面。这个提示我们\(j\)其实是在枚举\(p\)和\(q\)的\(gcd\)。

而又\(j\)和\(i\)互质,其实这个式子的真正目的是对于每个\(i\)求有多少对数的\(gcd\)和\(i\)互质然后求和。换成式子就是

\[\sum_{i=1}^n\sum_{q=1}^n\sum_{p=1}^n[gcd(gcd(q,p),i)=1]
\]

就是三对数之间互质的对数,之间上莫反就可以了

\[\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor^3\mu(i)
\]

\(n\)比较大,要用杜教筛筛一下\(mu\)

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


code

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<map>
  5. #define ll long long
  6. using namespace std;
  7. const ll N=1e7+10,P=998244353;
  8. ll n,cnt,pri[N],mu[N],ans;
  9. map<ll,ll> mp;
  10. bool v[N];
  11. ll get_sum(ll n){
  12. if(mp.find(n)!=mp.end())return mp[n];
  13. if(n<N)return mu[n];
  14. ll rest=1;
  15. for(ll l=2,r;l<=n;l=r+1)
  16. r=n/(n/l),(rest+=P-(r-l+1)*get_sum(n/l))%=P;
  17. return mp[n]=rest;
  18. }
  19. signed main()
  20. {
  21. scanf("%lld",&n);mu[1]=1;
  22. for(ll i=2;i<N;i++){
  23. if(!v[i])pri[++cnt]=i,mu[i]=-1;
  24. for(ll j=1;j<=cnt&&i*pri[j]<N;j++){
  25. v[i*pri[j]]=1;
  26. if(i%pri[j]==0)break;
  27. mu[i*pri[j]]=-mu[i];
  28. }
  29. }
  30. for(ll i=1;i<N;i++)(mu[i]+=mu[i-1])%=P;
  31. for(ll l=1,r;l<=n;l=r+1){
  32. r=n/(n/l);
  33. ll p=n/l;p=p*p%P*p%P;
  34. (ans+=p*(get_sum(r)-get_sum(l-1))%P)%=P;
  35. }
  36. printf("%lld\n",(ans+P)%P);
  37. return 0;
  38. }

P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】的更多相关文章

  1. 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛

    题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...

  2. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

  3. luogu3172 [CQOI2015]选数 莫比乌斯反演+杜教筛

    link 题目大意:有N个数,每个数都在区间[L,H]之间,请求出所有数的gcd恰好为K的方案数 推式子 首先可以把[L,H]之间的数字gcd恰好为K转化为[(L-1)/K+1,H/K]之间数字gcd ...

  4. BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛

    求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$   $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...

  5. 【BZOJ3930】选数(莫比乌斯反演,杜教筛)

    [BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首 ...

  6. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  7. [CQOI2015]选数(莫比乌斯反演,杜教筛)

    [CQOI2015]选数(luogu) Description 题目描述 我们知道,从区间 [L,H](L 和 H 为整数)中选取 N 个整数,总共有 (H-L+1)^N 种方案. 小 z 很好奇这样 ...

  8. 【题解】Luogu P4450 双亲数

    原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 设F(t)表示满足gcd(x,y)%t=0的数对个数,f(t)表示满足gcd(x,y)=t的数对个数,实际上答案就是f(d) 这就满足莫比乌斯反演 ...

  9. 洛谷 - P4450 - 双亲数 - 整除分块

    https://www.luogu.org/fe/problem/P4450 应该不分块也可以. 求\(F(n,m,d)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^ ...

随机推荐

  1. Redis5.0 配置文件中文参考

    Redis 5.0 配置文件#是否在后台执行,yes:后台运行:no:不是后台运行daemonize yes#是否开启保护模式,默认开启.要是配置里没有指定bind和密码.开启该参数后,redis只会 ...

  2. msql中@RequestParam、@Param、@PathVariable的用法

    @RequestParam的用法 1.可以对传入参数指定参数名,将请求参数绑定至方法参数 // 下面的对传入参数指定为aa,如果前端不传aa参数名,会报错 @RequestParam(value=&q ...

  3. RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

  4. html调用swf的语句

    <div style="width: 1000px; height: 202px; margin-left: auto; margin-right: auto"> &l ...

  5. 判断宽度的js

    <script language="javascript" type="text/javascript">/*将获取的值存到变量里*/width_s ...

  6. Go-内置函数之append、recover用法

    package main import "fmt" import "time" func test() { defer func() { if err := r ...

  7. 记一次线上问题 → 对 MySQL 的 ON UPDATE CURRENT_TIMESTAMP 的片面认知

    开心一刻 老婆痛经,躺在沙发上,两岁的女儿看着她问道 女儿:妈妈,你怎么了 老婆:妈妈肚子痛 女儿:哦,妈妈你头疼 老婆:不是头疼,妈妈是肚子疼 女儿用她的不锈钢饭碗砸向老婆的额头,说道:妈妈,你哪里 ...

  8. 五分钟搞懂MySQL索引下推

    大家好,我是老三,今天分享一个小知识点--索引下推. 如果你在面试中,听到MySQL5.6"."索引优化" 之类的词语,你就要立马get到,这个问的是"索引下推 ...

  9. Linux - 设置帮助文件为中文

    前言 当我们执行某个命令的 --h 或者  --help 时,默认输出的都是英文,接下来我们来说下如何将所有帮助文件显示成中文哦! 设置系统默认语言为中文 对应每个shell而言,重启后会变成英文,所 ...

  10. SQL-DELETE触发器练习

    &练习一 如下所示三张表( student,grade,student_updata_before ): student表 grade表 Student_update_before表 # 触发 ...