BZOJ2480 Spoj3105 Mod 数论 扩展BSGS
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2480.html
题目传送门 - BZOJ2480
题意
已知数 $a,p,b$ ,求满足 $a^x≡b \pmod p $ 的最小自然数 $x$ 。
$a,p,b\leq 10^9$
题解
ExBSGS模板题。
UPD(2018-09-10):
详见数论总结。
传送门 - https://www.cnblogs.com/zhouzhendong/p/Number-theory-Residue-System.html
代码
- #include <bits/stdc++.h>
- using namespace std;
- int a,p,b;
- int Pow(int x,int y,int mod){
- int ans=1;
- for (;y;y>>=1,x=1LL*x*x%mod)
- if (y&1)
- ans=1LL*ans*x%mod;
- return ans;
- }
- int gcd(int x,int y){
- return y?gcd(y,x%y):x;
- }
- struct hash_map{
- static const int Ti=233,mod=1<<16;
- int cnt,k[mod+1],v[mod+1],nxt[mod+1],fst[mod+1];
- int Hash(int x){
- int v=x&(mod-1);
- return v==0?mod:v;
- }
- void clear(){
- cnt=0;
- memset(fst,0,sizeof fst);
- }
- void update(int x,int a){
- int y=Hash(x);
- for (int p=fst[y];p;p=nxt[p])
- if (k[p]==x){
- v[p]=a;
- return;
- }
- k[++cnt]=x,nxt[cnt]=fst[y],fst[y]=cnt,v[cnt]=a;
- return;
- }
- int find(int x){
- int y=Hash(x);
- for (int p=fst[y];p;p=nxt[p])
- if (k[p]==x)
- return v[p];
- return 0;
- }
- int &operator [] (int x){
- int y=Hash(x);
- for (int p=fst[y];p;p=nxt[p])
- if (k[p]==x)
- return v[p];
- k[++cnt]=x,nxt[cnt]=fst[y],fst[y]=cnt;
- return v[cnt]=0;
- }
- }Map;
- int ExBSGS(int A,int B,int P){
- A%=P,B%=P;
- int k=0,v=1;
- while (1){
- int g=gcd(A,P);
- if (g==1)
- break;
- if (B%g)
- return -1;
- k++,B/=g,P/=g,v=1LL*v*(A/g)%P;
- if (v==B)
- return k;
- }
- if (P==1)
- return k;
- int M=max((int)sqrt(1.0*P),1),AM=Pow(A,M,P);
- Map.clear();
- for (int b=0,pw=B;b<M;b+=1,pw=1LL*pw*A%P)
- Map.update(pw,b+1);
- for (int a=M,pw=1LL*v*AM%P;a-M<P;a+=M,pw=1LL*pw*AM%P){
- int v=Map.find(pw);
- if (v)
- return a-(v-1)+k;
- }
- return -1;
- }
- int main(){
- while (~scanf("%d%d%d",&a,&p,&b)&&(a||b||p)){
- int ans=ExBSGS(a,b,p);
- if (~ans)
- printf("%d\n",ans);
- else
- puts("No Solution");
- }
- return 0;
- }
BZOJ2480 Spoj3105 Mod 数论 扩展BSGS的更多相关文章
- BZOJ2480 Spoj3105 Mod
乍一看题面:$$a^x \equiv b \ (mod \ m)$$ 是一道BSGS,但是很可惜$m$不是质数,而且$(m, a) \not= 1$,这个叫扩展BSGS[额...... 于是我们需要通 ...
- BSGS 扩展大步小步法解决离散对数问题 (BZOJ 3239: Discrete Logging// 2480: Spoj3105 Mod)
我先转为敬? orz% miskcoo 贴板子 BZOJ 3239: Discrete Logging//2480: Spoj3105 Mod(两道题输入不同,我这里只贴了3239的代码) CODE ...
- Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)
哎呀大水题..我写了一个多小时..好没救啊.. 数论板子X合一? 注意: 本文中变量名称区分大小写. 题意: 给一个\(n\)阶递推序列\(f_k=\prod^{n}_{i=1} f_{k-i}b_i ...
- 【bzoj2480】Spoj3105 Mod
2480: Spoj3105 Mod Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 557 Solved: 210[Submit][Status][ ...
- BSGS及扩展BSGS总结(BSGS,map)
蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...
- BSGS与扩展BSGS
BSGS \(BSGS\)算法又称大步小步\((Baby-Step-Giant-Step)\)算法 \(BSGS\)算法主要用于解以下同余方程 \[A^x\equiv B(mod\ p)\]其中\(( ...
- 【模板】exBSGS/Spoj3105 Mod
[模板]exBSGS/Spoj3105 Mod 题目描述 已知数\(a,p,b\),求满足\(a^x\equiv b \pmod p\)的最小自然数\(x\). 输入输出格式 输入格式: 每个测试文件 ...
- bzoj 3283 扩展BSGS + 快速阶乘
T2 扩展BSGS T3 快速阶乘 给定整数n,质数p和正整数c,求整数s和b,满足n! / pb = s mod pc 考虑每次取出floor(n/p)个p因子,然后将问题转化为子问题. /*** ...
- BSGS和扩展BSGS
BSGS: 求合法的\(x\)使得\(a ^ x \quad mod \quad p = b\) 先暴力预处理出\(a^0,a^1,a^2.....a^{\sqrt{p}}\) 然后把这些都存在map ...
随机推荐
- 使用mysql自带工具mysqldump进行全库备份以及source命令恢复数据库
mysql数据库提供了一个很好用的工具mysqldump用以备份数据库,下面将使用mysqldump命令进行备份所有数据库以及指定数据库 一.mysqldump一次性备份所有数据库数据 /usr/lo ...
- Mysql 的安装(压缩文件)和基本管理
MySql安装和基本管理 本节掌握内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle ...
- Python装饰器执行顺序详解
探究多个装饰器执行顺序 装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序的一个迷思. 疑问 大部分涉及多个装饰器装饰的函数调用顺序时都会 ...
- hashtable——散列表
2018-11-01 散列表---哈希表基于快速存取,时间换空间一种基于线性数组的线性表,不过元素之间并非紧密排列 散列函数--通过函数,有key关键码计算地址(相当于数组下标),函数尽可能使元素均匀 ...
- mvn tomcat7:help的14个命令
D:\2018\code\XXX>mvn tomcat7:help [INFO] Scanning for projects... [INFO] [INFO] ----------------- ...
- Es6对象的扩展和Class类的基础知识笔记
/*---------------------对象的扩展---------------------*/ //属性简写 ,属性名为变量名, 属性值为变量的值 export default functio ...
- 深入分析Zookeeper的实现原理
zookeeper 的由来 分布式系统的很多难题,都是由于缺少协调机制造成的.在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper.Google ...
- C#关于线程的问题
1.通过System.threading.Thread类可以创建新的线程,并在线程堆栈中运行静态和动态的实例,可以通过Thread类的构造方法传递一个无参数,并且不返回的委托, class Progr ...
- hdu2871 区间合并(类似poj3667)+vector应用
用vector进行插入和删除操作! 总是有些地方处理不好,对拍了才知道错在哪里,, /* 给定一些操作 reset 清空 new a ,申请最左边的连续a个空间 free a,清空a所在的块 get ...
- spfa+01 规划
尼玛的哪里错了.. /* 在有向图上找一个环,使结点权值和/边权和的比例值最大 01规划,设比例为l,那么将每条边的权值改成a[u]-l*w,如果有正权环,则比例l可行 如何判图中存在正权环?将 权值 ...