P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】
除了最后一题都比较简单就写一起了
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
#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
题目大意
给出\(n\)求
\]
解题思路
\(\text{CYJian}\)的题啊,时限\(0.2s?\)不过只是看起来花里胡哨,没有其他\(\text{CYJian}\)的题那么难。
先简单把\(lcm\)拆出来化一下式子
\]
左边那个很容易求就是\((n!)^{2n}\),右边那个因为是乘积所以很好做,直接枚举质数幂\(d^e\),让有\(\lfloor\frac{n}{d^e}\rfloor^2\)对数的\(gcd\)包含\(d^e\),会产生这么多的贡献,但是因为在\(d^{e-1}\)的时候也统计过一次,所以只需要产生\(d\)的贡献就好了。
时间复杂度\(O(n\log n)\)
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
题目大意
给出\(n\)求
\]
解题思路
刚开始还以为可以直接暴力整除分块+杜教筛欧拉函数然后\(O(n^{\frac{3}{4}})\)搞,然后发现时限是\(1s\)。
发现这个式子的顺序很奇怪,特意的把\(j\)放在了里面。这个提示我们\(j\)其实是在枚举\(p\)和\(q\)的\(gcd\)。
而又\(j\)和\(i\)互质,其实这个式子的真正目的是对于每个\(i\)求有多少对数的\(gcd\)和\(i\)互质然后求和。换成式子就是
\]
就是三对数之间互质的对数,之间上莫反就可以了
\]
\(n\)比较大,要用杜教筛筛一下\(mu\)
时间复杂度\(O(n^{\frac{2}{3}})\)?
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;
}
P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】的更多相关文章
- 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛
题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...
- [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)
[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...
- luogu3172 [CQOI2015]选数 莫比乌斯反演+杜教筛
link 题目大意:有N个数,每个数都在区间[L,H]之间,请求出所有数的gcd恰好为K的方案数 推式子 首先可以把[L,H]之间的数字gcd恰好为K转化为[(L-1)/K+1,H/K]之间数字gcd ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$ $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...
- 【BZOJ3930】选数(莫比乌斯反演,杜教筛)
[BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首 ...
- 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)
[51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...
- [CQOI2015]选数(莫比乌斯反演,杜教筛)
[CQOI2015]选数(luogu) Description 题目描述 我们知道,从区间 [L,H](L 和 H 为整数)中选取 N 个整数,总共有 (H-L+1)^N 种方案. 小 z 很好奇这样 ...
- 【题解】Luogu P4450 双亲数
原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 设F(t)表示满足gcd(x,y)%t=0的数对个数,f(t)表示满足gcd(x,y)=t的数对个数,实际上答案就是f(d) 这就满足莫比乌斯反演 ...
- 洛谷 - P4450 - 双亲数 - 整除分块
https://www.luogu.org/fe/problem/P4450 应该不分块也可以. 求\(F(n,m,d)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^ ...
随机推荐
- redis数据同步之redis-shake
redis-shake简介 redis-shake是阿里开源的用于redis数据同步的工具,基本功能有: 恢复restore:将RDB文件恢复到目的redis数据库. 备份dump:将源redis的全 ...
- spring开发中常见错误集合,逐步添加
1.关于jstl错误:原因,在jsp页面中使用了jstl标签库,但是却没有导入,可以将相应的jar包放在tomcat的lib目录下,一劳永逸 Java.lang.NoClassDefFoundErro ...
- linux中的分号&&和&,|和||说明与用法
在用linux命令时候,我们可以一行执行多条命令或者有条件的执行下一条命令,下面我们讲解一下linux命令分号&&和&,|和||的用法 在用linux命令时候,我们可以一行执行 ...
- 处理URLs
问题 你有一个包含相对URLs路径的HTML文档,需要将这些相对路径转换成绝对路径的URLs. 方法 在你解析文档时确保有指定base URI,然后 使用 abs: 属性前缀来取得包含base URI ...
- C#设计模式---PipeLine
一.概述 顾名思义,管道模式就像一条管道把多个对象连接起来,整体看起来就像若干个阀门嵌套在管道中,而处理逻辑就放在阀门上,如下图,需要处理的对象进入管道后,分别经过阀门一.阀门二.阀门三.阀门四,每个 ...
- Mybatis中多表联查,查询出来的字段出现重名,造成数据异常的解决方法!
在做一对多出现的问题,引发的思考:当数据库表中,主表的主键id和明细表的中的字段名相同时怎么办?Mybatis进行自动映射赋值的时候会不会出现异常? 注意:M ...
- Linux常用命令(一)之文件处理命令
分时的多用户.多任务的操作系统 多数的网络协议的支持(unix和tcp/ip协议是同时发展起来的),方便的远程管理(可以通过图形.命令行) 强大的内存管理和文件管理系统 大量的可用软件和免费软件(游戏 ...
- 【Spring 持久层】Spring 与 Mybatis 整合
持久层整合总述 1.Spring 框架为什么要与持久层技术进行整合? JavaEE开发需要持久层进行数据库的访问操作 JDBC.Hibernate.MyBatis 进行持久开发过程存在大量的代码冗余 ...
- openresty(nginx) 配置 http与https使用同一个端口,禁止 IP 直接访问
准备好工作目录 mkdir work cd work mkdir conf logs 准备好 conf/nginx.conf 配置文件, 把 your.domain 换成你自己的域名 user abc ...
- WEB漏洞——SQL
由于我的博客是学到渗透的时候才做的,没有关于WEB漏洞的笔记,现在发现WEB层面的漏洞有些不太熟悉了,边写一下笔记边复习一下,就从sql注入开始吧 话不多说先上大佬写的表[ctfhub]SQL注入 - ...