一句话题意:给定长度为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. 攻防世界 web 进阶区 刷题记录

    1.Training-WWW-Robots 题目提示了robots协议,直接访问robots.txt 继续访问fl0g.php 2.baby_web 题目描述:想想初始页面是哪个 百度搜了下,inde ...

  2. 第三方控件引起的"类型Universe无法解析程序集"的血案

    前一阵子在项目中添加了IrisSkin2皮肤控件,今天用VS打开悲剧了. 提示"类型Universe无法解析程序集:System.Design,Version=2.0.0.0,Culture ...

  3. Python 输入与输出

    Python2版本 raw_input raw_input("输入提示"),会把输入的内容当做字符串返回 input 会把用户输入的内容当做代码来处理,可以理解为 raw_inpu ...

  4. VUE组件 单独文件封装

    https://www.cnblogs.com/SamWeb/p/6391373.html vuejs 单文件组件.vue 文件   vuejs 自定义了一种.vue文件,可以把html, css, ...

  5. 【原】Jenkins pipeline中资料总结

    docker-compose 快速部署持续集成测试环境 Gitlab+Harbor+Jenkins pipeline 实现 tag run docker Images https://www.cnbl ...

  6. c++ 读取、输出txt文件

    下面这段话转自:https://blog.csdn.net/lightlater/article/details/6326338 关于文本文件的文件头 第一 ANSI文件的文件头为空,不需要处理: 第 ...

  7. Rect Native 使用

    参见 Rect Native 中文官网. 依赖环境: Homebrew.npm.Node.js.Watchman(监测Bug和文件变化,触发指定操作).flow(JS静态类型检查仪,以方便找出代码中错 ...

  8. PhpStorm For Mac 安装使用及 Php 开发的 ‘Hello World’

    PHP全称为:Hypertext Preprocessor,中文名为:『超文本预处理 器』是一种通用开源脚本语言,主要用于Web应用开发(俗称做网站或 者做后台!) 编译软件:PHPStorm for ...

  9. 关于调用接口 Connection reset 问题(使用代理调接口)

    之前调用过别的公司的接口上传数据,但是遇到个问题就是Connection reset,查阅了网上的各种资料,说什么的都有,主要意思就是说发布接口和调用接口的某些配置不一样,但是这个怎么说呢,单方面没办 ...

  10. main函数递归

    以前听说main()不能递归?于是在CentOS7上使用gcc-8.1.0测试了一下,发现可行: #include <stdio.h> int x = 5; int main(int ar ...