牛客NOIPtg day5 B-demo的gcd
一句话题意:给定长度为n的序列,求任意两两之间gcd的积mod 998244353的值。
好像是莫比乌斯反演板子题???(反正noip估计不考这种毒瘤
考场上想到一个类似正解的思路 好像摊下来最多处理nlogn次就义无反顾地写了结果爆零
(你以为for while if continue 都不要时间的啊
后来一看发现自己的思路貌似毫无问题,就是实现丑了(逃
可以看到对于每一个质数p,对答案的贡献为p^k(k-1) 其中k=序列中包含质因数p的数个数
然后对于质数的幂次p^q,考场上的思路是每次计算质数之后将原序列中的该质数除掉,如此循环直到找不到该质因数为止(于是就T了还不如暴力qvq
其实可以考虑另一种很简单的思路 对于任意一个p^k,枚举他的倍数,对答案的贡献即为p^k'(k'-1),与上述等价,复杂度为O(nlogn)(其实是ln
代码如下
#include <cstdio>
#include <iostream>
#define qvq register
#define int long long
using namespace std;
const int mod=;
const int maxn=;
int p[maxn],cnt,a[maxn];
bool np[maxn]; inline int read() {
int x=,f=;
char cr=getchar();
while (cr>'' || cr<'') {
if (cr=='-') f=-;
cr=getchar();
}
while (cr>='' && cr<='') {
x=(x<<)+(x<<)+cr-'';
cr=getchar();
}
return x*f;
} inline void euler() {
for (qvq int i=;i<=;i++) {
if (!np[i]) p[++cnt]=i;
for (qvq int j=;j<=cnt && p[j]*i<=;j++) {
np[p[j]*i]=;
if (i%p[j]==) break;
}
}
} inline int val(int k) {
return k*(k-)/;
} inline int power(int a,int b,int p) {
if (b==) return ;
if (b==) return a;
if (b&) return a*power(a*a%p,b>>,p)%p;
else return power(a*a%p,b>>,p);
} int num[maxn],f[maxn]; signed main() {
int n=read();
int lim=-;
for (qvq int i=;i<=n;i++) a[i]=read(),num[a[i]]++,lim=max(lim,a[i]);
euler();
for (int i=;i<=cnt;i++) {
int temp=p[i];
while (temp<=) {
f[temp]=p[i];
temp*=p[i];
}
}
int ans=;
for (int i=;i<=lim;i++) {
if (!f[i]) continue;
int res=;
for (int j=i;j<=lim;j+=i) res+=num[j];
ans*=power(f[i],val(res),mod),ans%=mod;
}
printf("%lld",ans);
}
我太菜了orz
牛客NOIPtg day5 B-demo的gcd的更多相关文章
- 牛客国庆集训day5 G 贵族用户 (模拟)
链接:https://www.nowcoder.com/acm/contest/205/G来源:牛客网 题目描述 终于活成了自己讨厌的样子. 充钱能让你变得更强. 在暖婊这个游戏里面,如果你充了x元钱 ...
- 2019牛客国庆集训派对day5
2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...
- 区间加值,区间gcd, 牛客949H
牛客小白月赛16H 小阳的贝壳 题目链接 题意 维护一个数组,支持以下操作: 1: 区间加值 2: 询问区间相邻数差的绝对值的最大值 3: 询问区间gcd 题解 设原数组为\(a\), 用线段树维护\ ...
- 牛客网国庆集训派对Day5 题目 2018年
链接:https://www.nowcoder.com/acm/contest/205/L来源:牛客网参考博客:https://blog.csdn.net/HTallperson/article/de ...
- 牛客国庆集训day5 B 电音之王 (大数乘模)
链接:https://www.nowcoder.com/acm/contest/205/B来源:牛客网 题目描述 终于活成了自己讨厌的样子. 听说多听电音能加快程序运行的速度. 定义一个数列,告诉你a ...
- 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
- 牛客小白月赛13 小A买彩票 (记忆化搜索)
链接:https://ac.nowcoder.com/acm/contest/549/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客小白月赛13-J小A的数学题 (莫比乌斯反演)
链接:https://ac.nowcoder.com/acm/contest/549/J来源:牛客网 题目描述 小A最近开始研究数论题了,这一次他随手写出来一个式子,∑ni=1∑mj=1gcd(i,j ...
- 牛客练习赛44C
链接:https://ac.nowcoder.com/acm/contest/634/C来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模板 ...
随机推荐
- Wordpress-微信机器人高级版
微信机器人高级版是我爱水煮鱼开发的一款插件,功能很棒,运行此插件需要同时开启WPJAM Basic插件. 高级版5.0 版本对服务器要求非常高,只支持 Linux 服务器,PHP 要求 7.2 及以上 ...
- ProtoBuf试用与JSON的比较
介绍 ProtoBuf 是google团队开发的用于高效存储和读取结构化数据的工具.什么是结构化数据呢,正如字面上表达的,就是带有一定结构的数据.比如电话簿上有很多记录数据,每条记录包含姓名.ID.邮 ...
- UIImageView的API
- (instancetype)initWithImage:(UIImage *)image; 返回使用指定图像初始化的图像视图. - (instancetype)initWithImage:(UII ...
- 洛谷P1060开心的金明(滚动数组优化)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行”. ...
- ANSYS-APDL施加扭转载荷CERIG命令
目录 1. 要求 2. ANSYS有限元分析 2.1 APDL建模 2.2 APDL施加载荷 2.3 APDL查看结果 3. 举一反三 1. 要求 一块0.8m*0.4m*0.04m厚的钢板,在板的两 ...
- kafka 分区
1. 默认存储 /tmp/kafka-logs test-0 0:分区数
- Hosts工作原理及作用
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开.其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”.当用户在浏览器中输入一个需要登录的网址时,系统会先检查系自己的Ho ...
- SQL SERVER 2005还原差异备份、日志备份 2012-03-29 11:43
其实要备份,还原最安全最有保障的是完全备份.但是完全备份肯定是需要更多的磁盘空间的开销.尤其是数据量比较大的.比如基数是500M,每天的增长量为10M,那么第一次完全备份是500M,第二次是510M, ...
- 【原】postman设置环境变量和全局变量
一:设置环境变量 1. postman通过变换环境变量来快速变换环境地址. 2. 现可以将localhost:80信息添加至环境 3. 点击确定后,在首页可看到已添加的环境变量信息及设置的变量信息: ...
- Python组合类型笔记
Python中常用的三种组合数据类型,分别是: - 集合类型 - 序列类型 - 字典类型 1. 集合类型: -集合用大括号{}表示,元素间用逗号分隔 -建立集合类型用{}或set() -建立空集合类型 ...