题目链接

BZOJ2277

题解

orz太难了

如果一个数\(x\)是密码,那么所有\((x,n)\)的倍数都是密码
如果两个数\(x,y\)是密码,那么所有\((x,y)\)的倍数都是密码

那么如果最后的密码集合为\(\{x_i\}\)那么一定存在一个\(x_i\)是剩余所有数的\(gcd\)
所以我们只需找最小的\(x | n\)且\(x | a_k\)且\(x \nmid a_i\)

那就找出\((a_k,n)\)的所有质因子,再用\((a_i,a_k,n)\)筛去不合法的即可

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 1000005,maxm = 10000005,INF = 1000000000;
inline LL read(){LL out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
LL n,k,a[maxn],L,fac[maxn],p[maxn],tot,cnt;
int vis[maxn];
LL gcd(LL a,LL b){return b ? gcd(b,a % b) : a;}
void getfac(){LL x,tmp = L;for (x = 1; x * x <= tmp; x++){if (tmp % x == 0){fac[++tot] = x;if (x * x != tmp) fac[++tot] = tmp / x;}}sort(fac + 1,fac + 1 + tot);
}
void getp(){LL x,tmp = L;for (x = 2; x * x <=tmp; x++)if (tmp % x == 0){p[++cnt] = x;while (tmp % x == 0) tmp /= x;}if (tmp - 1) p[++cnt] = tmp;
}
int main(){n = read(); k = read();REP(i,k) a[i] = read();L = gcd(n,a[k]);getfac(); getp();LL x;for (int i = 1; i < k; i++){x = gcd(a[i],L);vis[lower_bound(fac + 1,fac + 1 + tot,x) - fac] = true;}for (int i = tot - 1; i; i--){if (vis[i]) continue;x = fac[i];for (int j = 1; j <= cnt && x * p[j] <= L; j++){LL y = x * p[j];int pos = lower_bound(fac + 1,fac + 1 + tot,y) - fac;if (fac[pos] == y && vis[pos]){vis[i] = true;break;}}}LL ans = 0;for (int i = 1; i <= tot; i++)if (!vis[i]){ans = n / fac[i]; break;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/9117144.html

BZOJ2277 [Poi2011]Strongbox 【数论】相关推荐

  1. BZOJ2277[Poi2011]Strongbox——数论

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

  2. BZOJ2277: [Poi2011]Strongbox

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

  3. BZOJ 2277 Poi2011 Strongbox 数论

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

  4. P3518 [POI2011]strongbox

    https://www.luogu.org/problem/show?pid=3518 问题描述: 有一个密码箱,0 到 n-1中的某些整数是它的密码,且满足:如果a和b都是它的密码,那么(a+b)% ...

  5. 【BZOJ】2277: [Poi2011]Strongbox

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

  6. 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个在 ...

  7. [POI2011] SEJ-Strongbox(数论)

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

  8. 数论(一)——素数,GCD,LCM

    这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...

  9. 【数论总结】-----励志写好一篇数论总结↖(^ω^)↗//正在施工...未完工

    近期学了学数论,来写一波总结吧. (1)排列组合,比较基础的东西了吧.//只写个概念吧,(逃: 概念:就是从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合: ...

最新文章

  1. 音视频技术开发周刊 | 169
  2. .NET Windows服务应用程序
  3. CSS盒子模型之详解
  4. 【Linux高频命令专题(23)】tar
  5. Python 爬虫学习2
  6. 业务请求量膨胀的扩容技术实践
  7. thinkPHP使用中遇到的问题交流==
  8. (一)GPS与基站定位
  9. 本地KMS虚拟服务器,搭建kms本地服务器
  10. DSPE-PEG-MAL,474922-22-0,DSPE-PEG-Maleimide
  11. 理论分析 | 势流理论与水动力
  12. 个人怎么开发APP?APP开发全流程解析!
  13. turtle---见证小海龟的浪漫之画
  14. Linux Deploy搭建移动渗透系统
  15. CENTOS linux kernel 内核编译
  16. cas ucenter 集成
  17. SpringBoot + Spring Cloud +Vue 管理系统后台搭建(七、业务代码通用CURD实现)
  18. poj1275 「一本通 3.4 例 2」出纳员问题
  19. 微信小程序 vue 滑块验证码
  20. Ruby On Rails 常用的精品Gem汇总

热门文章

  1. Java字符串拆分详解
  2. 如何c语言解析html中的图片地址,【c语言】使用gumbo解析HTML
  3. 【labview】图表时间轴(数据+时间戳) +源程序
  4. python建站与java建站有何不同_Python与JAVA有何区别?
  5. 【转载】SPSS数据分析中出现的常见问题总结
  6. 论文阅读——(邬江兴院士) 网络空间内生安全综述 Cyberspace Endogenous Safety and Security
  7. 解决FTP文件访问需要输入用户名和密码的问题
  8. 数据库 ----- 实验三:SQL的查询
  9. cvs配电保护断路器_CVS100F断路器|施耐德CVS100F100A断路器
  10. C语言void和int的区别是什么?