牛客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]中孪生质数有多少对. 由于这是一个区间筛质数的模板 ...
随机推荐
- 中山纪中Day1--普及
早上一起,扑面是瓢泼的大雨.跨过千山万水,来到纪中门前,毅然以一种大无畏的英雄气概跨进了考场. 面对四道神题.然后,我成功过五关斩六将,A掉了2道题!!! 收获:优先队列(大.小根堆) T1:APPL ...
- Python引用某一文件的方法出现红色波浪线
from parse import parse_url#引用parse里面的方法 结果出现波浪线并提示 This inspection detects names that should resolv ...
- 【代码学习】PYTHON 列表循环遍历及列表常见操作
一.for循环 为了更有效率的输出列表的每个数据,可以使用循环来完成 代码: A = ['xiaoWang','xiaoZhang','xiaoHua'] for tempName in A: pri ...
- 【代码总结】MYSQL数据库的常见操作
============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与关闭 -h:指定所连接的服 ...
- 用js实现复制内容到操作系统粘贴板(兼容IE、谷歌、火狐等浏览器)
一.如果只考虑IE浏览器,可以直接用原声js实现 if(window.clipboardData){ //清空操作系统粘贴板 window.clipboardData.clearData(); //将 ...
- JSP页面中关于<c:if test="${...}"><c:if>标签的用法
代码如下: <td class="showTd_HK" align="center"> <c:if test="${(rwyy01. ...
- lc 0223
目录 ✅ 669. 修剪二叉搜索树 描述 解答 java py ✅ 883. 三维形体投影面积 描述 解答 my understanding c py py map ?? python zip(*gr ...
- JS获取光标在input 或 texterea 中下标位置
<textarea placeholder="请输入表达式" id="methodInput" ></textarea> 获取位置: v ...
- linux/centos之配置tomcat
一:下载tomcat压缩包 在http://archive.apache.org/dist/tomcat/中下载合适版本的tomcat,也可以在官网上下载,只是一般只有最新版本,选择二进制的后缀为ta ...
- 判断ie8以下 或者ie9以下
1.各种浏览器下载 http://browsehappy.osfipin.com/ 2.ie8浏览器以下 if(![].map) { // IE8浏览器 alert('ie8浏览器') } 3.ie9 ...