CCPC2021 广州 K. Magus Night
CCPC2021 广州 K. Magus Night
题意
给定整数区间 \([1,m]\) ,从中可重复的选择 \(n\) 个数,形成一个数列 \(\{a_n\}\) 。问:所有满足 \(\gcd(a_1,...,a_n)\le q\) 并且 \(\text{lcm}(a_1,...,a_n)\ge p\) 的数列的乘积和。
题解
官方题解其实已经很明了了,我这里再做个翻译。题目要求的是 \(\gcd\le q\) 且 \(\text{lcm} \ge p\) 的所有数列的乘积和。根据 \(\gcd|\text{lcm}\) 这一性质可以枚举 \((\gcd,\text{lcm})\) 数对来计算,但此题的 \(\text{lcm}\) 会很大,无法直接枚举所有大于 \(p\) 的 \(\text{lcm}\) ,所以需要转换思路,大的枚举不完,但小的好枚举,于是我们做这么一个容斥:
\]
其中 \((a,b)\) 表示满足 \(a\) 和 \(b\) 条件下的所有数列的乘积和, \(S\) 代表全体数列的乘积和。
全体数列的乘积和可以这么表示:每一个数的取值范围都是 \([1,m]\) ,利用分配律,可知
\]
然后再求 \((\gcd>q)\) 。这是个经典问题,很容易由容斥算出来。
然后就是 \((\gcd\le q,\text{lcm}<p)\) 。考虑上述的分配律,我们也可以把满足 \(\gcd=g,\text{lcm}=l\) 的所有数列的乘积和表示成一些数乘积的和。考虑到唯一分解定理,我们使用素数来进行表示。对于两个数 \(a,b\) ,把他们写成唯一分解的形式:
b=p_1^{t_1}p_2^{t_2}...p_s^{t_s}\\
\gcd(a,b)=p_1^{\min(k_1,t_1)}p_2^{\min(k_2,t_2)}...p_s^{\min(k_s,t_s)}\\
\text{lcm}(a,b)=p_1^{\max(k_1,t_1)}p_2^{\max(k_2,t_2)}...p_s^{\max(k_s,t_s)}
\]
由此可知,一对 \(\gcd,\text{lcm}\) 便确定了素数幂次的上界和下界,利用上述的分配律计算贡献即可。计算的时候需要注意的是,上界和下界必须取到,可以考虑下面的容斥来进行计算:
设下界为 \(L\) ,上界为 \(R\) ,那么
\]
AC代码
这份代码没有优化,1887ms,过的非常危险。
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std;
using ll = long long;
constexpr int N = 2e5+5, P=998244353;
ll f[N], mind[N];
ll qpow(ll a, ll b){
ll res=1;
for(;b;b>>=1,a=a*a%P)if(b&1)res=res*a%P;
return res;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("1.in", "r", stdin);
#endif // !ONLINE_JUDGE
cin.tie(nullptr)->ios::sync_with_stdio(false);
rep(i,2,N)if(!mind[i])for(int j=i;j<N;j+=i)mind[j]=i;
ll n,m,p,q; cin>>n>>m>>p>>q;
ll inv2=qpow(2,P-2);
ll ans=qpow((m*(m+1)%P*inv2)%P,n);
for(int i=m;i>q;i--){
ll cnt=m/i;
f[i]=qpow(i,n)*qpow((cnt*(cnt+1)%P*inv2%P),n)%P;
for(int j=i+i;j<=m;j+=i)f[i]=(f[i]-f[j]+P)%P;
ans=(ans-f[i]+P)%P;
}//cout<<ans<<endl;
rep(l,1,m+1){
f[l]=1;
for(int tmp=l,pr;tmp!=1;){
pr=mind[tmp];
ll x=0,y=1;
for(;tmp%pr==0;x=(x+y)%P,y=y*pr%P)tmp/=pr;
ll temp=(qpow(x+y,n)-qpow(x,n)-qpow(x+y-1,n)+qpow(x-1,n))%P;
f[l]=(f[l]*temp)%P;
}
}
rep(i,1,q+1)for(int j=i;j<p;j+=i)ans=(ans-qpow(i,n)*f[j/i]%P+P)%P;
cout<<ans;
return 0;
}
CCPC2021 广州 K. Magus Night的更多相关文章
- django模型操作
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表
- hdu 5137 去掉一个点 使得最短路最大(2014广州现场赛 K题)
题意:从2~n-1这几个点中任意去掉一个点,使得从1到n的最短路径最大,如果任意去掉一个点1~n无通路输出Inf. Sample Input4 51 2 31 3 71 4 502 3 43 4 23 ...
- 笔试总结篇(一) : 广州X公司笔试
一.单选题: Ps : 当时由于去广州路上颠簸很困,导致刚做几分钟题目就睡了一觉.起来发现20分钟过去了.擦擦! 1. 假设磁盘文件foobar.txt 由 6个ASCII 码字符“foobar” 组 ...
- [深圳/广州]微软SQL技术沙龙分享会(MVP)
[深圳/广州] 新一期俱乐部活动报名开始,这次是广深地区SQL Server 技术沙龙分享会(MVP),SQL Server作为一个数据平台,不管是SQL Server 2017 on Linux 还 ...
- 广州.NET微软技术俱乐部微信群有用信息集锦(10) - 大量json数据压缩方案
这是广州.NET微软技术俱乐部微信群有用信息集锦系列的其中一篇文章. 刚才微信群里有人问:“对于大量json数据返回的时候,有用过什么压缩方案吗?” 大家都给与了回答和帮助.包括: 开启gzi ...
- spss-非参数检验-K多个独立样本检验( Kruskal-Wallis检验)案例解析
今天和大家一起探讨和分下一下SPSS-非参数检验--K个独立样本检验 ( Kruskal-Wallis检验). 还是以SPSS教程为例: 假设:HO: 不同地区的儿童,身高分布是相同的 H1: 不 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)
这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...
- 找到第k个最小元----快速选择
此算法借用快速排序算法. 这个快速选择算法主要利用递归调用,数组存储方式.包含3个文件,头文件QuickSelect.h,库函数QuickSelect.c,测试文件TestQuickSelect. 其 ...
- BZOJ 3110: [Zjoi2013]K大数查询 [树套树]
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6050 Solved: 2007[Submit][Sta ...
随机推荐
- 服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP))
服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP)) 第一步.更换阿里云 yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo ...
- 【Unity 框架】 QFramework v1.0 使用指南 工具篇: 16. LiveCodingKit 写代码不用停止运行的利器 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
我们在用 Unity 开发的时候,每次编写或修改一点代码就需要进行 停止运行->编写代码->等待编译->运行游戏. 而在很多情况下这个过程是一个比较耗神的过程,因为开发者需要等待,还 ...
- 导出excel类型转换
Map headmap = new LinkedHashMap<String, String>(); headmap.put("createtime", "日 ...
- drf-drf请求、响应、基于GenericAPIView+5个视图扩展类
1.反序列化类校验部分源码分析(了解) 1.当我们在视图类中生成一个序列化类对象ser,并且用ser.is_valid()是就会执行校验,校验通过返回True,不通过返回False.首先对象ser和序 ...
- TCP与UDP、socket模块
1.传输层之TCP与UDP协议 1.TCP协议 1.传输控制协议(也称为TCP协议或可靠协议)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议,(数据不容易丢失);造成数据不容 ...
- P34_数据请求 - GET和POST请求
网络数据请求 小程序中网络数据请求的限制 出于安全性方面的考虑,小程序官方对数据接口的请求做出了如下两个限制: 只能请求 HTTPS 类型的接口 必须将接口的域名添加到信任列表中 配置 request ...
- .net 中的几种事务
在一个MIS系统中,没有用事务那就绝对是有问题的,要么就只有一种情况:你的系统实在是太小了,业务业务逻辑有只要一步执行就可以完成了.因此掌握事务处理的方法是很重要,进我的归类在.net中大致有以下4种 ...
- CF873E - Awards For Contestants
题意:对于 \(n\) 个人,每个人有一个分数,现在要把所有人分成四等,使得: 前三类都有人 前三类中,任意类的人数不大于其他类的人数的两倍 不能有 \(i\) 的分数比 \(j\) 高但是所属的等级 ...
- 07#Web 实战:仿 GitHub 个人主页项目拖拽排序
实现效果图 GitHub 和 Gitee 个人主页中可以对自己的项目进行拖拽排序,于是我就想自己实现一个.本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程. ...
- Ubuntu上安装TensorFlow
一.更新环境 sudo apt-get update sudo apt-get install golang python3-dev python-dev libcupti-dev libjpeg- ...