一句话题意:给定长度为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的更多相关文章

  1. 牛客国庆集训day5 G 贵族用户 (模拟)

    链接:https://www.nowcoder.com/acm/contest/205/G来源:牛客网 题目描述 终于活成了自己讨厌的样子. 充钱能让你变得更强. 在暖婊这个游戏里面,如果你充了x元钱 ...

  2. 2019牛客国庆集训派对day5

    2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...

  3. 区间加值,区间gcd, 牛客949H

    牛客小白月赛16H 小阳的贝壳 题目链接 题意 维护一个数组,支持以下操作: 1: 区间加值 2: 询问区间相邻数差的绝对值的最大值 3: 询问区间gcd 题解 设原数组为\(a\), 用线段树维护\ ...

  4. 牛客网国庆集训派对Day5 题目 2018年

    链接:https://www.nowcoder.com/acm/contest/205/L来源:牛客网参考博客:https://blog.csdn.net/HTallperson/article/de ...

  5. 牛客国庆集训day5 B 电音之王 (大数乘模)

    链接:https://www.nowcoder.com/acm/contest/205/B来源:牛客网 题目描述 终于活成了自己讨厌的样子. 听说多听电音能加快程序运行的速度. 定义一个数列,告诉你a ...

  6. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  7. 牛客小白月赛13 小A买彩票 (记忆化搜索)

    链接:https://ac.nowcoder.com/acm/contest/549/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...

  8. 牛客小白月赛13-J小A的数学题 (莫比乌斯反演)

    链接:https://ac.nowcoder.com/acm/contest/549/J来源:牛客网 题目描述 小A最近开始研究数论题了,这一次他随手写出来一个式子,∑ni=1∑mj=1gcd(i,j ...

  9. 牛客练习赛44C

    链接:https://ac.nowcoder.com/acm/contest/634/C来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模板 ...

随机推荐

  1. Linux - 查看端口占用、开放情况

    1. lsof -i : 2. nmap 127.0.0.1 3. sudo netstat -tunlp (不加sudo看不见PID) 4. gufw 参考 https://askubuntu.co ...

  2. npm 配置国内淘宝镜像

    淘宝NPM镜像官网:http://npm.taobao.org/ npm config set registry=http://registry.npm.taobao.org -g 安装cnpm: n ...

  3. Linux新手常用命令

    Linux下有时候需要转换到管理员权限 su root   然后输入密码  或者直接  su ---------------------------------------- 但可能存在鉴定错误的异常 ...

  4. POJ1321棋盘问题(暴搜)

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...

  5. Codeforces Round #619 (Div. 2) A. Three Strings

    You are given three strings aa , bb and cc of the same length nn . The strings consist of lowercase ...

  6. Postgresql查询表和表结构

    查询表名 SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' O ...

  7. iOS 根据域名查询 IP 地址

    在 iOS 开发中,如果需要知道网站的 IP 地址: #include <netdb.h> #include <arpa/inet.h> NSString *webSiteSt ...

  8. Tomcat 配置目录及文件说明!

    ==================================================================================

  9. MBR扇区故障修复!

    一:进行分区且格式化硬盘 [root@roomc~]#mkfs -t ext4 /dev/sdb1    //格式化sdb1盘 二:模拟破坏/sda主硬盘破坏再修复! [root@roomc~]#mk ...

  10. Newtonsoft.Json 版本不一致导致错误

    可以在配置文件添加这部分,其他版本的不一致,也可使用这种方式解决. <runtime> <assemblyBinding xmlns="urn:schemas-micros ...