https://www.luogu.org/problem/show?pid=3518

问题描述:
有一个密码箱,0 到 n-1中的某些整数是它的密码,且满足:如果a和b都是它的密码,那么(a+b)%n
也是它的密码(a,b可以相等)某人试了k次密码,前k-1次都失败了,第k次成功了。
问:该密码箱最多有多少个密码?

输入输出:
输入第一行两个整数分别表示n,k。
第二行k个非负整数,表示每次试的密码。
输出一个数,为密码最多个数

分析
由题意,x是密码,那么(x+x)%n是密码,(2x+x)%n也是密码…… x*k%n是密码;①
x*k-n*c=GCD(x,n)
观察上面这个式子,一定有一个整数t,使得x*t%n==GCD(x,n),由①可得,GCD(x,n)也是密码。
于是得出
结论1:如果x是密码,那么GCD(x,n)也是密码。

设x,y是两个密码,那么(p*x+q*y)%n也是密码。②
a*x+b*y=GCD(x,y)一定有解,所以a*x+b*y≡GCD(x,y) (mod n)一定有解③
因为:a*x+b*y ≡ a*x+b*y+p*n*x+q*n*x (mod n)
即 : (a+p*n)*x+(b+q*n)*y ≡ a*x+b*y (mod n) ④
由③④得:
(a+p*n)*x+(b+q*n)*y≡GCD(x,y)一定有解
由②得:((a+p*n)*x+(b+q*n) )%n 一定是密码(a+p*n相当于②里面的p),
④=>a*x+b*y是密码 , 进而③=>GCD(x,y) 是密码。
于是得出
结论2:x,y是密码,那么GCD(x,y)也是密码
实现方法
先设a[k]=GCD(n,a[k]),可以先在根号时间复杂度内处理出a[k]的所有因子,存在q数组中,
接着去除所有是GCD(a[i],a[k])的因数,设去除后最小的因子为x,那么答案是n/x。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
#define M 250005
using namespace std;
int f[M],k;
LL a[M],q[M],n;
LL gcd(LL a,LL b)
{if(a<b) swap(a,b); return b?gcd(b,a%b):a;
}
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]);int t=0;for(LL i=1;i*i<=a[k];i++){if(a[k]%i==0)//i是a[k]的因子{q[++t]=i;if(a[k]/i!=i) q[++t]=a[k]/i;//a[k]/i也是a[k]的因子 } }sort(q,q+t+1);for(int i=1;i<k;i++){f[lower_bound(q+1,q+t+1,a[i])-q]=1;}for(int i=1;i<=t;i++)if(f[i])for(int j=1;j<i;j++)if(q[i]%q[j]==0)f[j]=1;int p;for(p=1;f[p];p++);printf("%lld",n/q[p]);return 0;
}

P3518 [POI2011]strongbox相关推荐

  1. BZOJ2277[Poi2011]Strongbox——数论

    题目描述 Byteasar is a famous safe-cracker, who renounced his criminal activity and got into testing and ...

  2. 【BZOJ】2277: [Poi2011]Strongbox

    题意 有一个密码箱,\(0\)到\(n-1\)中的某些整数是它的密码.如果\(a\)和\(b\)都是它的密码,那么\((a+b)%n\)也是它的密码(\(a,b\)可以相等).某人试了\(k\)次密码 ...

  3. BZOJ 2277 Poi2011 Strongbox

    题目大意:一个集合A,包含了0~n-1这n个数.另有一个集合B,满足: 1.B是A的子集. 2.如果a.b均在B中,则(a+b)%n也在B中(a=b亦可) 给出k个数ai,前k-1个不在B中,第k个在 ...

  4. 【洛谷】P3518 [POI2011]SEJ-Strongbox

    题目描述 有一个密码箱,0到n-1中的某些整数是它的密码. 且满足,如果a和b都是它的密码,那么(a+b)%n也是它的密码(a,b可以相等) 某人试了k次密码,前k-1次都失败了,最后一次成功了. 问 ...

  5. BZOJ2277: [Poi2011]Strongbox

    n<=10^14,0~n-1中有一些数是密码,且满足:a是密码,b是密码,那么(a+b)%n也是密码(a,b可相等),现小明试了m<=250000个数,前面都错,最后一个对,问n个数中最多 ...

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

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

  7. BZOJ2277 [Poi2011]Strongbox 【数论】

    题目链接 BZOJ2277 题解 orz太难了 如果一个数\(x\)是密码,那么所有\((x,n)\)的倍数都是密码 如果两个数\(x,y\)是密码,那么所有\((x,y)\)的倍数都是密码 那么如果 ...

  8. BZOJ 2277 Poi2011 Strongbox 数论

    题目大意:给定n和k个整数,求mod n加法下的群G的一个子群G',满足a[1]~a[k-1]都不在群中而a[k]在群中 首先易证G'一定是一个循环群 证明:显然若a在群中则a的逆元在群中 那么我们就 ...

  9. [P3518]strongbox

    原题链接 题面是英文的 总之可以用谷歌翻译糊弄一下 要解决这个题一共需要两个结论 结论一: 如果x是密码 那么GCD(x , n)也是密码 结论二: 如果x , y是密码 那么GCD(x , y)也是 ...

最新文章

  1. java中有符号数和无符号数,C语言中无符号数和有符号数之间的运算
  2. 17. 搭建FTP服务端
  3. TortoiseSVN客户端重新设置用户名和密码
  4. python define graph_Python数据结构与算法之图结构(Graph)实例分析
  5. 【MySQL】错误#1217:外键约束引起的错误
  6. ibatis中resultClass与resultMap 的区别
  7. Hashcat从入门到入土(二)
  8. 1736. 替换隐藏数字得到的最晚时间
  9. spring 查找实现类_69道Spring面试题和答案
  10. 71. Merge k Sorted Lists
  11. java随机数生成三位数_Java编写一程序编写一程序,实现下面功能.(1)随机产生200个三位的正整数,按每行10个数输出.(2)统计其中偶数和...
  12. callback用法 js vue_Vue前端开发——使用高德地图WebApi
  13. 海康威视ivms-4200图文说明
  14. SQL server常见问题
  15. 电子电路学习笔记(2)——电容
  16. 新消费下的国货崛起新模式!
  17. gazebo仿真时在加入差分运动插件后没有cmd_vel话题
  18. ps插件 Ultimate Retouch Panel AEX for mac破解版
  19. 怎么安装redhat linux操作系统,Linux操作系统RedHat6.5安装
  20. android网络音乐播放器

热门文章

  1. 2021 年8月份最新数据库排行榜出炉
  2. 如何学习SQL (转)
  3. Cglib之Enhancer创建动态代理
  4. win10/win11 + WSL + gui 配置教程
  5. 大连工业大学计算机学硕,考研调剂:大连工业大学招收“学硕”调剂研究生一名!...
  6. 言简意赅说明强类型语言、弱类型语言、动态语言、静态语言
  7. 微信小程序使用全套指南
  8. macbook pro下安装三系统
  9. ps--photoshop的简单使用方法
  10. 四旋翼无人机学习第8节--OpenMV电路分析