题目描述

有一个密码箱,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相关推荐

  1. 洛谷 P3518 [POI2011] SEJ-Strongbox 题解

    思路: 首先先将每个输入的数据与n的最大公约数求出(因为如果a[i]是密码,那么所有a[i]与n最大公约数的倍数也是密码:于是如果a[i]不是密码,那么所有a[i]与n最大公约数的倍数也都不是密码)再 ...

  2. [洛谷P3527] [POI2011]MET-Meteors

    洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...

  3. 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告

    P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...

  4. [洛谷P3521][POI2011]ROT-Tree Rotations

    题目大意:给一棵$n(n\leqslant2\times10^5)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少.输出最少的逆序对个数 题解:线段树合并,对于每个节点求出交换 ...

  5. 洛谷3518strongbox(poi2011)

    注意审题,a是密码,那么a,2a,3a--也是密码,推出t=gcd(n,ak)的倍数也是密码.这个t,可能是a+b=c中的c,也可能是其中的a,b.如果(a,b)是密码,那么存在ax+by=c,而这个 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  8. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  9. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  10. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

最新文章

  1. tf.nn.softmax_cross_entropy_with_logits()笔记及交叉熵
  2. Python下opencv使用笔记系列
  3. Java的访问控制修饰符_访问权限修饰符_访问权限修饰词
  4. ZooKeeper的安装和API
  5. 想要定位其中的iframe并切进去的定位方法
  6. JAVA实现随机无重复数字功能
  7. Github - 第一篇:Github安装与配置
  8. 电容触摸屏测试软件,大规模生产中如何测量触摸屏电容值
  9. 计算机固态加机械硬盘,固态硬盘和机械硬盘怎么混合使用
  10. 字体在ppt中可以整体替换吗_在ppt中怎么批量替换字体和图片呢?
  11. 关于微信 init接口返回的Count和webwxbatchgetcontact post请求的参数Count
  12. 企业微信scrm是什么
  13. 最新Mac Pro详解
  14. Java 8 list 对象字段升序降序
  15. java中StringTokenizer使用
  16. Linux之ARM(IMX6U)裸机汇编LED驱动实验--编译驱动
  17. IE浏览器兼容性模式
  18. 电动车治理再度升级,多地将有“新变化”
  19. IEEE之后,学术政治化会成为人类的“潘多拉魔盒”吗?
  20. 写php需要什么软件?

热门文章

  1. 磁共振t1t2信号记忆顺口溜_学习MRI时,老师都说 T1 看解剖,T2 看病变,T1、T2 是什么意思?大家怎样理解这句话的?...
  2. AUTOCAD2008注册
  3. Python入门实例验证及结果之实例7 圆周率的计算 ##程序循环结构 ##random库
  4. LaTeX soul包
  5. 如何衡量品牌营销效果?四大指标为王道
  6. 图片聚类——k-means算法的python实现
  7. python文件定位函数_python 文件和路径操作函数小结
  8. 主页(一)01-搜索栏-顶部搜索栏布局
  9. sha256加密时报错 [TMA] Error: input is invalid type
  10. java期末程序填空_Java后端期末复习