Codeforces.487C.Prefix Product Sequence(构造)
\(Description\)
对于一个序列\(a_i\),定义其前缀积序列为\(a_1\ \mathbb{mod}\ n,\ (a_1a_2)\ \mathbb{mod}\ n,...,(a_1a_2...a_n)\ \mathbb{mod}\ n\)。
给定\(n\),求一个\(n\)的排列,使得该排列的前缀积序列是\([0,1,2,...,n-1]\)的一个排列。无解输出\(NO\)。
\(n\leq10^5\)。
\(Solution\)
考虑无解的情况。因为\(n!\equiv0\ (\mathbb{mod}\ n)\),所以\((n-1)\not\equiv0\ (\mathbb{mod}\ n)\)。
\(n\)为质数显然可以满足。否则设\(n=pq\)。
若\(p\neq q\),那么有\((n-1)!\equiv0\ (\mathbb{mod}\ n)\),GG了。
若\(p=q\),当\(n>4\)时,\(2p<n\),所以也有\((n-1)!\equiv0\ (\mathbb{mod}\ n)\),GG。
所以\(n\)为大于\(4\)的合数时无解。特判一下\(n=4\)。
首先\(a_1\)要填\(1\),\(a_n\)要填\(n\)。
考虑能不能直接让前缀积序列变成\(1,2,...,0\)。那么\(a_i=\frac{i}{i-1}\ \mathbb{mod}\ n,\ i>1\)。
只需要判断是否有\(\frac{a}{a-1}=\frac{b}{b-1},\ 1\lt a\neq b\lt n\)。
稍微化一下,\(\frac{a}{a-1}=1+\frac1a,\ \frac{b}{b-1}=1+\frac1b\),而我们知道每个数的逆元是唯一的,所以这么做就OK啦。
//46ms 600KB
#include <cstdio>
#include <algorithm>
typedef long long LL;
const int N=1e5+5;
int A[N],inv[N];
bool IsPrime(int x)
{
int t=0;
for(int i=2; x!=1; ++i)
while(!(x%i))
{
x/=i;
if(++t>1) return 0;
}
return 1;
}
int main()
{
int n; scanf("%d",&n);
if(n==4) return printf("YES\n1\n3\n2\n4\n"),0;
if(!IsPrime(n)) return puts("NO"),0;
A[1]=1, A[n]=n, inv[1]=1;
for(int i=2; i<n; ++i) inv[i]=1ll*(n-n/i)*inv[n%i]%n, A[i]=1ll*i*inv[i-1]%n;
puts("YES");
for(int i=1; i<=n; ++i) printf("%d\n",A[i]);
return 0;
}
Codeforces.487C.Prefix Product Sequence(构造)的更多相关文章
- Codeforces 487C. Prefix Product Sequence 逆+结构体
意甲冠军: 对于数字n, 他询问是否有1~n置换 这种布置能够在产品上模每个前缀n 有可能0~n-1 解析: 通过观察1肯定要在首位,n一定要在最后 除4意外的合数都没有解 其它质数构造 a[i]=i ...
- codeforces 487C C. Prefix Product Sequence(构造+数论)
题目链接: C. Prefix Product Sequence time limit per test 1 second memory limit per test 256 megabytes in ...
- [CF 487C Prefix Product Sequence]
题意 将1~n的正整数重排列,使得它的前缀积在模n下形成0~n-1的排列,构造解或说明无解.n≤1E5. 思考 小范围内搜索解,发现n=1,n=4和n为质数时有解. 不难发现,n一定会放在最后,否则会 ...
- 487C Prefix Product Sequence
传送门 题目大意 分析 因为n为质数所以i-1的逆元唯一 因此ai唯一 代码 #include<iostream> #include<cstdio> #include<c ...
- cf487C Prefix Product Sequence
Consider a sequence [a1, a2, ... , an]. Define its prefix product sequence . Now given n, find a per ...
- Prefix Product Sequence CodeForces - 487C (数论,构造)
大意: 构造一个[1,2,...n]的排列, 使得前缀积模n为[0,1,...,n-1]的排列 这种构造都好巧妙啊, 大概翻一下官方题解好了 对于所有>=6的合数$n$, 有$(n-1)! \e ...
- codeforces 1042C Array Product【构造】
题目:戳这里 题意:n个数,两种操作,第一种是a[i]*a[j],删掉a[i],第一种是直接删除a[i](只能用一次)剩下的数序列号不变.操作n-1次,使最后剩下的那个数最大化. 解题思路: 正数之间 ...
- Codeforces 486E LIS of Sequence(线段树+LIS)
题目链接:Codeforces 486E LIS of Sequence 题目大意:给定一个数组.如今要确定每一个位置上的数属于哪一种类型. 解题思路:先求出每一个位置选的情况下的最长LIS,由于開始 ...
- CodeForces 837F - Prefix Sums | Educational Codeforces Round 26
按tutorial打的我血崩,死活挂第四组- - 思路来自FXXL /* CodeForces 837F - Prefix Sums [ 二分,组合数 ] | Educational Codeforc ...
随机推荐
- 数据库MySql的安装
1.MySQL概述 MySQL最初是由“MySQL AB公司”开发的一套关系型数据库管理系统(RDBMS-Relation DataBase Management System).MySQL不仅是最流 ...
- python基础复习
复习-基础 一.review-base 其他语言吗和python的对比 c vs Python c语言是python的底层实现,解释器就是由python编写的. c语言开发的程序执行效率高,开发现率低 ...
- 20165206 2017-2018-2 《Java程序设计》第二周学习总结
20165205 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 java语言共有8种基本数据类型,分别是boolean.byte.short.char.in ...
- C#异常断电后重新启动项目出现配置未初始化错误
转到如截图中所示路径,将其下的数据删掉,就可以启动了.
- C# float与UInt16互转
//float拆分成两个UInt16 public static UInt16 FloatToTwoUInt16(float f) { byte[] bs = BitConvert.GetBytes( ...
- javascript var变量删除
var有三种声明的情形: var声明的全局变量 var在函数范围内声明的局部变量 eval中声明的全局变量. 首先, 1.2种情形var声明的变量是无法删除的. 尽管var声明的全局变量是属于wind ...
- EF连接MySql数据库
Windows要想EF连接MySql,首先要安装两个应用程序 mysql-connector-net-6.8.8.msimysql-for-visualstudio-1.2.7.msi 项目还需要两个 ...
- sql select中加入常量列
string sql="select a,b,'常量' as c from table" 注:单引号' ' 很重要,否则编译时会把其看成查询参数,从而提示参数未指定错误
- CentOS7中Docker-ce的卸载和安装
一.查看是否已安装了Docker软件包: #查看是否已经安装的Docker软件包sudo yum list installed | grep docker 二.如果已安装不想要的docker/dock ...
- Spring MVC 注解
概述 Spring MVC是一个采用依赖注入的思想编写.对象的依赖注入Bean的方式可以通过Spring XML里面配置,配置之后的Bean使用时候,无需使用New关键字建立对象.但是如果所有的B ...