【洛谷】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=1ax+by=1ax+by=1
从而得知以下方程有解
ax+by≡1(modn)ax+by\equiv1(mod \ n)ax+by≡1(mod n)
虽然题目中只能用加法,x与y可能小于0,但是因为
a(x+kn)+b(y+kn)≡ax+by≡1(modn)a(x+kn)+b(y+kn)\equiv ax+by\equiv1(mod \ n)a(x+kn)+b(y+kn)≡ax+by≡1(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[250005],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=1;i<=k;i++)if(a[i]%x==0)return 0;return 1;
}
int main()
{scanf("%lld%d",&n,&k);for(int i=1;i<=k;i++)scanf("%lld",&a[i]),a[i]=gcd(a[i],n);long long x=a[k];sort(a+1,a+k);k=unique(a+1,a+k)-a-1;for(long long i=1;i*i<=x;i++)if(x%i==0){if(check(i)){printf("%lld\n",n/i);return 0;}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[250005],p[250005],q[250005],pri[250005];
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=1;i<=k;i++)scanf("%lld",&a[i]);a[k]=gcd(a[k],n);for(int i=1;i<k;i++)a[i]=gcd(a[i],a[k]);for(int i=1;1ll*i*i<=a[k];i++)if(a[k]%i==0){q[++en]=i;if(1ll*i*i!=a[k])q[++en]=a[k]/i;}sort(q+1,q+1+en);long long x=a[k];for(int i=2;1ll*i*i<=x;i++)if(x%i==0){pri[++pri[0]]=i;while(x%i==0)x/=i;}if(x!=1)pri[++pri[0]]=x;for(int i=1;i<k;i++)p[lower_bound(q+1,q+en+1,a[i])-q]=1;for(int i=en;i>=1;i--){if(p[i])for(int j=1;j<=pri[0];j++)if(q[i]%pri[j]==0)p[lower_bound(q+1,q+en+1,q[i]/pri[j])-q]=1;}cnt=1;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最大公约数的倍数也都不是密码)再 ...
- [洛谷P3527] [POI2011]MET-Meteors
洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...
- 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告
P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...
- [洛谷P3521][POI2011]ROT-Tree Rotations
题目大意:给一棵$n(n\leqslant2\times10^5)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少.输出最少的逆序对个数 题解:线段树合并,对于每个节点求出交换 ...
- 洛谷3518strongbox(poi2011)
注意审题,a是密码,那么a,2a,3a--也是密码,推出t=gcd(n,ak)的倍数也是密码.这个t,可能是a+b=c中的c,也可能是其中的a,b.如果(a,b)是密码,那么存在ax+by=c,而这个 ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
- 洛谷 P1142 轰炸
洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...
- 洛谷 P1387 最大正方形
P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...
- 洛谷P2763 试题库问题
题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...
- 动态规划——洛谷_P1057传球游戏
题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...
最新文章
- tf.nn.softmax_cross_entropy_with_logits()笔记及交叉熵
- Python下opencv使用笔记系列
- Java的访问控制修饰符_访问权限修饰符_访问权限修饰词
- ZooKeeper的安装和API
- 想要定位其中的iframe并切进去的定位方法
- JAVA实现随机无重复数字功能
- Github - 第一篇:Github安装与配置
- 电容触摸屏测试软件,大规模生产中如何测量触摸屏电容值
- 计算机固态加机械硬盘,固态硬盘和机械硬盘怎么混合使用
- 字体在ppt中可以整体替换吗_在ppt中怎么批量替换字体和图片呢?
- 关于微信 init接口返回的Count和webwxbatchgetcontact post请求的参数Count
- 企业微信scrm是什么
- 最新Mac Pro详解
- Java 8 list 对象字段升序降序
- java中StringTokenizer使用
- Linux之ARM(IMX6U)裸机汇编LED驱动实验--编译驱动
- IE浏览器兼容性模式
- 电动车治理再度升级,多地将有“新变化”
- IEEE之后,学术政治化会成为人类的“潘多拉魔盒”吗?
- 写php需要什么软件?
热门文章
- 磁共振t1t2信号记忆顺口溜_学习MRI时,老师都说 T1 看解剖,T2 看病变,T1、T2 是什么意思?大家怎样理解这句话的?...
- AUTOCAD2008注册
- Python入门实例验证及结果之实例7 圆周率的计算 ##程序循环结构 ##random库
- LaTeX soul包
- 如何衡量品牌营销效果?四大指标为王道
- 图片聚类——k-means算法的python实现
- python文件定位函数_python 文件和路径操作函数小结
- 主页(一)01-搜索栏-顶部搜索栏布局
- sha256加密时报错 [TMA] Error: input is invalid type
- java期末程序填空_Java后端期末复习