Cyclic GCDs
Cyclic GCDs
题面描述
有\(n\)个点,每个点有权值。
现有排列\(P\),\(p_i\)表示\(i\)个点向\(p_i\)连了一条边。
显然会形成若干个简单环。每个简单环的权值定义为环上最小的权值,一张图的权值定义为所有环的权值的乘积。
所有形成了\(k\)个简单环的图的权值和记为\(b_k\)
现在要求\(b_1,b_2...b_n\)的最大公因数。
输出对大质数取模。
\(n\le10^5\)
解题思路
首先可以发现,顺序无关紧要,为了方便处理,我们把权值从小到大排序。
考虑这样的一个\(DP\)
我们设\(dp[i][j]\)表示考虑到前\(i\)个数,共形成了\(j\)个简单环的权值和。
我们考虑把第\(i+1\)个数塞进去的方式:
- 塞入到一个之前的环中,可以接在每个点后面,共有\(i\)种接法。由于我们从小到大排序,所以不会改变每个环上的最小值,得到转移:\(dp[i+1][j]+=i*dp[i][j]\)
- 独立成环,方案数不变,多了一个\(a_{i+1}\)的权值,得到转移:\(dp[i+1][j+1]+=a_{i+1}*dp[i][j]\)
于是我们得到了一个\(O(n^2)\)的做法。
我们把\(dp[k]\)的生成函数写出来,设为
\]
根据上面的转移,可知:
\]
于是,最终的\(dp[n]\)的生成函数为:
\]
可以证明,最后的\(gcd\)等于每个\(gcd\)相乘。
于是我们就愉快的做完了。
证明
命题:\(S(x),R(x)\)为整系数多项式,每一项系数的\(gcd\)分别为\(s,r\),则多项式\(P(x)Q(x)\)每一项系数的\(gcd\)为\(sr\)
证明:不妨设\(s=r=1\),不难证明,这与原命题等价。
假设\(S(x)R(x)\)每一项系数的\(gcd\)为质数\(p\)的倍数,我们期望导出矛盾。
考虑最高次项的系数,为\(S(x)\)与\(R(x)\)的最高项系数相乘得到的结果。
因为最高次项系数为质数\(p\)的倍数,所以\(S(x),R(x)\)的最高项系数其中一个为\(p\)的倍数,不妨设为\(S(x)\)的最 高项系数。
因为系数为\(p\)的倍数,它与其他系数乘积也为\(p\)的倍数,并不影响最后多项式任何一项系数对\(p\)的整除性,所 以将\(S(x)\)的最高项次数变为\(0\),并不影响最后的\(gcd\)是否是\(p\)的倍数。
然后就变成了一个子问题,继续迭代,取最高次项,直到有一个多项式变为零多项式为止。
那么,这个零多项式,他原来的每一项系数均为\(p\)的倍数,这与假设不符,矛盾。
故原命题成立。
代码
#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
int n;
int ans;
int a[100005];
int gcd(int a,int b){
return a%b?gcd(b,a%b):b;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
ans=a[1];
for(int i=1;i<n;i++)
ans=1ll*ans*gcd(a[i+1],i)%mod;
printf("%d\n",ans);
}
Cyclic GCDs的更多相关文章
- 【AtCoder】Dwango Programming Contest V题解
A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...
- Codeforces Round #385 (Div. 2) A. Hongcow Learns the Cyclic Shift 水题
A. Hongcow Learns the Cyclic Shift 题目连接: http://codeforces.com/contest/745/problem/A Description Hon ...
- codeforces 709C C. Letters Cyclic Shift(贪心)
题目链接: C. Letters Cyclic Shift 题意: 现在一串小写的英文字符,每个字符可以变成它前边的字符即b-a,c-a,a-z这样,选一个字串变换,使得得到的字符串字典序最小; 思路 ...
- Cyclic Nacklace[HDU3746]
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 3746:Cyclic Nacklace
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- V-rep学习笔记:机器人逆运动学数值解法(Cyclic Coordinate Descent Method)
When performing inverse kinematics (IK) on a complicated bone chain, it can become too complex for a ...
- hdu-----(3746)Cyclic Nacklace(kmp)
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 1853 Cyclic Tour 最小费用最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 There are N cities in our country, and M one-way ...
- Cyclic Nacklace
Problem Description CC always becomes very depressed at the end of this month, he has checked his cr ...
随机推荐
- Android开发 SeekBar开发记录
前言 开发记录博客不是讲解使用博客,更多的是各种功能与点子的记录 基本使用 <SeekBar android:layout_width="match_parent" andr ...
- css----7渐变
linear-gradient(90deg,red 10%,yellow 20%,green 30%) <!DOCTYPE html> <html> <head> ...
- [JZOJ3303] 【集训队互测2013】城市规划
题目 题目大意 求\(N\)个点的简单无向图的方案数(有编号). 结果对\(1004535809\)取模. 思考历程 感觉这个问题非常经典. 当时想到了一堆式子,但都觉得可能会有重和漏,于是弃掉了-- ...
- 【JZOJ6275】小L的数列
description analysis 考虑矩阵乘法 设初始\(m×m\)矩阵上\(i\)行\(j\)列的数字表示该矩阵第\(j\)位上\(f[i]\)的指数 那么一开始表示\(f[1..k]\)的 ...
- 微服务配置中心实战:Spring + MyBatis + Druid + Nacos
在结合场景谈服务发现和配置中我们讲述了 Nacos 配置中心的三个典型的应用场景,包括如何在 Spring Boot 中使用 Nacos 配置中心将数据库连接信息管控起来,而在“原生”的 Spring ...
- MYSQL - 外键、约束、多表查询、子查询、视图、事务
MYSQL - 外键.约束.多表查询.子查询.视图.事务 关系 创建成绩表scores,结构如下 id 学生 科目 成绩 思考:学生列应该存什么信息呢? 答:学生列的数据不是在这里新建的,而应该从学生 ...
- Swig c++=>C#
1.下载swig https://sourceforge.net/projects/swig/files/ 2.配置环境变量 path 添加你的swig路径 3.创建项目解决方案和一个win32 dl ...
- BZOJ 1911 (APIO 2010) 特别行动队
题目描述 你有一支由n名预备役士兵组成的部队,士兵从1到n编号,要将他们拆分成若干特别行动队调入战场.出于默契考虑,同一支特别行动队中队员的编号应该连续,即为形如(i,i+1,-,i+k)的序列. 编 ...
- IMS Call中的SS
1Hold procedure:对于每一个被HOLD的媒体流,SDP包含: 如果流之前被设置为“recvonly”媒体流则是一个“不活动”的SDP属性: 如果先前将流设置为“sendrecv”媒体流则 ...
- Integer 类和 int 基本数据类型的区别
public static void main(String[] args) { Integer i = 10; Integer j = 10; System.out.println(i == j); ...