【洛谷】P3518 [POI2011]SEJ-Strongbox
题目描述
有一个密码箱,0到n-1中的某些整数是它的密码。 且满足,如果a和b都是它的密码,那么(a+b)%n也是它的密码(a,b可以相等) 某人试了k次密码,前k-1次都失败了,最后一次成功了。 问:该密码箱最多有多少不同的密码。
输入格式
第一行n,k
下面一行k个整数,表示每次试的密码
保证存在合法解
输出格式
一行,表示结果
输入样例
42 5
28 31 10 38 24
输出样例
14
提示
1<=k<=250000 k<=n<=10^14
分析
首先不可能存在存在两个密码互质(这一点想了我半天
如果有两个密码互质,那么0到n-1就都是密码
证明
设两个密码分别为a,b,根据扩展欧几里得定理,以下方程肯定有解
$$ax+by=1$$
从而得知以下方程有解
$$ax+by\equiv1(mod \ n)$$
虽然题目中只能用加法,x与y可能小于0,但是因为
$$a(x+kn)+b(y+kn)\equiv ax+by\equiv1(mod \ n)$$
我应该是第一个在模运算中用连等的人
所以可以推出,如果有两个互质的密码,那么1也是密码
那么通过1自己加自己可以得出0到n-1都是密码
所以不存在互质的密码
用刚才的方法还可以一般性地证明,对于两个密码a与b,gcd(a,b)一定是密码
可以把gcd(a,b)看成万恶之源,它的倍数都是密码,进而衍生出了所有的密码。
如果一个数不是密码,那么它就绝对不是那个最小gcd的倍数
所以我们可以去枚举最小的gcd,验证是否可行。
显然gcd越小越好。
两种思路,一种是枚举后一个个验证,另一种是先去掉前k-1个数的约数再枚举。
Code 1
#include<cstdio>
#include<algorithm>
using namespace std;
int k;long long n,a[],ans;
long long gcd(long long a,long long b){return !b?a:gcd(b,a%b);}
int check(long long x)
{
for(int i=;i<=k;i++)if(a[i]%x==)return ;
return ;
}
int main()
{
scanf("%lld%d",&n,&k);
for(int i=;i<=k;i++)scanf("%lld",&a[i]),a[i]=gcd(a[i],n);long long x=a[k];
sort(a+,a+k);k=unique(a+,a+k)-a-;
for(long long i=;i*i<=x;i++)if(x%i==)
{
if(check(i)){printf("%lld\n",n/i);return ;}
if(check(x/i))ans=n/(x/i);
}
printf("%lld",ans);
}
Code 2
#include<cstdio>
#include<algorithm>
using namespace std;
int k;
long long n,en,cnt,ans,a[],p[],q[],pri[];
inline long long gcd(long long a,long long b){return !b?a:gcd(b,a%b);}
int main()
{
scanf("%lld%d",&n,&k);
for(int i=;i<=k;i++)scanf("%lld",&a[i]);
a[k]=gcd(a[k],n);
for(int i=;i<k;i++)a[i]=gcd(a[i],a[k]);
for(int i=;1ll*i*i<=a[k];i++)if(a[k]%i==)
{q[++en]=i;if(1ll*i*i!=a[k])q[++en]=a[k]/i;}sort(q+,q++en);
long long x=a[k];
for(int i=;1ll*i*i<=x;i++)if(x%i==){pri[++pri[]]=i;while(x%i==)x/=i;}
if(x!=)pri[++pri[]]=x;
for(int i=;i<k;i++)p[lower_bound(q+,q+en+,a[i])-q]=;
for(int i=en;i>=;i--)
{
if(p[i])
for(int j=;j<=pri[];j++)
if(q[i]%pri[j]==)p[lower_bound(q+,q+en+,q[i]/pri[j])-q]=;
}
cnt=;while(p[cnt])cnt++;
printf("%lld\n",n/q[cnt]);
}
【洛谷】P3518 [POI2011]SEJ-Strongbox的更多相关文章
- 洛谷 P3518 [POI2011] SEJ-Strongbox 题解
思路: 首先先将每个输入的数据与n的最大公约数求出(因为如果a[i]是密码,那么所有a[i]与n最大公约数的倍数也是密码:于是如果a[i]不是密码,那么所有a[i]与n最大公约数的倍数也都不是密码)再 ...
- 洛谷P3513 [POI2011]KON-Conspiracy
洛谷P3513 [POI2011]KON-Conspiracy 题目描述 Byteotia的领土被占领了,国王Byteasar正在打算组织秘密抵抗运动. 国王需要选一些人来进行这场运动,而这些人被分为 ...
- [洛谷P3527] [POI2011]MET-Meteors
洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...
- BZOJ2212或洛谷3521 [POI2011]ROT-Tree Rotations
BZOJ原题链接 洛谷原题链接 线段树合并裸题. 因为交换子树只会对子树内部的逆序对产生影响,所以我们计算交换前的逆序对个数和交换后的个数,取\(\min\)即可. 对每个叶子节点建一棵动态开点线段树 ...
- 洛谷P3515 [POI2011]Lightning Conductor(动态规划,决策单调性,单调队列)
洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 ...
- 洛谷 P3527 [POI2011]MET-Meteors 解题报告
P3527 [POI2011]MET-Meteors 题意翻译 \(\tt{Byteotian \ Interstellar \ Union}\)有\(N\)个成员国.现在它发现了一颗新的星球,这颗星 ...
- 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告
P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...
- 洛谷P3521 [POI2011]ROT-Tree Rotation [线段树合并]
题目传送门 Tree Rotation 题目描述 Byteasar the gardener is growing a rare tree called Rotatus Informatikus. I ...
- 洛谷P3527 [POI2011]MET-Meteors [整体二分]
题目传送门 Meteors 格式难调,题面就不妨放了. 分析: 一道整体二分的练手题. 就是一般的整体二分的套路,但是要注意,将修改和询问加入队列的时候要先加修改再加询问.另外,博主代码打得太丑,常数 ...
- [洛谷P3521][POI2011]ROT-Tree Rotations
题目大意:给一棵$n(n\leqslant2\times10^5)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少.输出最少的逆序对个数 题解:线段树合并,对于每个节点求出交换 ...
随机推荐
- java第四次面试总结
该公司没有笔试,直接就进行了面试,然后我就拿着我的简历瑟瑟发抖...... 1.因为是看简历来面试,所以面试官从我的项目下手,而我的项目都是后端的东西,虽然学过一些前端,但是项目里并没有用到任何jav ...
- 浏览器输入 URL 之后的链路
视频 [序章]要找到B站有多难?秃头警告 脑图 一次完整的 Http 事务 文章 技术普及帖:你刚才在淘宝上买了一件东西 Github-从URL输入到页面展现到底发生什么? 总结的非常全 前端面试题: ...
- 6.transform?animation?区别?animation-duration【CSS】
1.Transform:它和width.left一样,定义了元素很多静态样式实现变形.旋转.缩放.移位及透视等功能,通过一系列功能的组合我们可以实现很炫酷的静态效果(非动画). 2.Animatio ...
- HTTP缓存字段总结
首部 通用首部:有些首部提供了与报文相关的最基本的信息,它们被称为通用首部. 请求首部:请求首部是只在请求报文中有意义的首部. 响应首部 实体首部: 用来描述HTTP报文的负荷,由于请求和响应报文中都 ...
- 整合91平台接入的ANE
来源:http://www.swfdiy.com/?p=1328 91平台接入的SDK只有objectC版和java版, 现在如果要在AIR里使用SDK,只能编写ANE整合进来. 91SDK = 几个 ...
- NFS启动文件系统
NFS启动文件系统 一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E ...
- Spring WebSocket中403错误解决
最近测试了一下spring的websocket,遇到了一个比较恶心的问题,在这记录一下. 问题源自之前开发的一个h5项目,这个项目在80端口下一直放着,就顺便在里面随便加了几行代码测试websocke ...
- mysql启动错误:Starting MySQL.. ERROR! The server quit without updating PID file错误
1.原因是因为 mysql-bin.0000*的文件占满系统盘,磁盘空间不足导致无法写入. 解决方法: 如果不需要二进制日志文件,二进制文件可以实现数据库复制以及即时点恢复. 查看日志在配置文件的da ...
- 基于Java+Selenium的WebUI自动化测试框架(十二)-----读取Excel文件(POI)(2)
上一篇我们讲了怎么利用Java的反射机制,将Excel的读取到的数据,赋值给我们构造函数中定义的变量. 接下来就简单了,我们将实际实现这个读取的简单过程.来看下面一段代码. private stati ...
- Kotlin泛型与协变及逆变原理剖析
在上一次https://www.cnblogs.com/webor2006/p/11234941.html中学习了数据类[data class]相关的知识,这次会学习关于泛型相关的东东,其中有关于泛型 ...