题意:链接

方法: EXBSGS

解析:

这题与BSGS不同的地方就是模数可能不是质数了。

那怎么办呢?

其实也没什么,就是我们不断地分解A和当前的C的最大公约数,注意是当前的C。

假设我们最多分出来了K个最大公约数。

Akd1∗d2…∗dk∗Ax−k=Bd1∗d2…∗dk(modCd1∗d2…∗dk) \frac{A^k}{d1*d2…*dk}*A^{x-k}=\frac{B}{d1*d2…*dk}(mod \frac{C}{d1*d2…*dk})

那么怎么做呢?

首先暴力枚举[0,logC]的值是否可以成为解。

为什么取log呢?因为每一次拿出来的最大公约数一定是大于1的,也就是说我们至多拿出来了logC个数,此时的k就是logC,而我们只能求解x-k的部分,所以k的部分就暴力枚举。

然后呢,将左边 Akd1∗d2…∗dk \frac{A^k}{d1*d2…*dk}搞个逆元乘过去,再求BSGS即可。

别忘答案加上k

另外吐槽:这题BSGS就能过,没有C不是质数的数据,差评,但是POJ上就过不了了据说。

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define mod 140345
typedef long long ll;
ll A,B,C,ans;
int cnt,head[mod+10];
struct node
{ll from,to,val;int next;
}edge[mod+10];
void init()
{memset(head,-1,sizeof(head));cnt=1;
}
void edgeadd(ll from,ll to,ll val)
{edge[cnt].from=from,edge[cnt].to=to,edge[cnt].val=val;edge[cnt].next=head[from];head[from]=cnt++;
}
ll quick_my(ll x,ll y)
{ll ret=1;while(y){if(y&1)ret=(ret*x)%C;x=(x*x)%C;y>>=1;}return ret;
}
ll gcd(ll a,ll b)
{while(b){ll t=b;b=a%b;a=t;}return a;
}
void exgcd(ll a,ll b,ll &x,ll &y,ll &gcd)
{if(!b){x=1,y=0,gcd=a;return;}exgcd(b,a%b,y,x,gcd);y=y-a/b*x;
}
ll get_inv(ll x,ll MOD)
{ll X,Y,GCD;exgcd(x,MOD,X,Y,GCD);return (X%MOD+MOD)%MOD;
}
void BSGS(ll A,ll B,ll C)
{//A^x=B(mod C)init();ll m=(int)ceil(sqrt(C));ll k=1;for(int i=0;i<m;i++){int flag=0;for(int j=head[k%mod];j!=-1;j=edge[j].next){if(edge[j].val==k){flag=1;break;}}if(!flag)edgeadd(k%mod,i,k);k=k*A%C;}ll invk=get_inv(k,C);ll invD=1;for(int i=0;i<=m;i++){ll tmpB=B*invD%C; for(int j=head[tmpB%mod];j!=-1;j=edge[j].next){if(edge[j].val==tmpB){ans=edge[j].to+i*m;return;}}invD=invD*invk%C;}
}
int main()
{while(~scanf("%lld%lld%lld",&A,&C,&B)){if(A==0&&B==0&&C==0)break;int top=(int)ceil(log2(C));int flag=0;for(int i=0;i<=top;i++){if(quick_my(A,i)==B){printf("%d\n",i);flag=1;break;}}if(flag)continue;ll cntk=0;ll d=gcd(A,C);ll pile=1;while(d!=1){cntk++;if(B%d!=0){puts("No Solution");flag=1;break;}pile*=d;C/=d,B/=d;d=gcd(A,C);}if(flag)continue;ll inv1=get_inv(pile,C);ll wait_to_be_inv=quick_my(A,cntk)*inv1%C;ll tmp=get_inv(wait_to_be_inv,C);B=B*tmp%C;ans=-1;BSGS(A,B,C);if(ans!=-1)printf("%lld\n",ans+cntk);else puts("No Solution");}
}

BZOJ 1467 Pku3243 clever Y EXBSGS相关推荐

  1. luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法

    BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...

  2. MOD - Power Modulo Inverted(SPOJ3105) + Clever Y(POJ3243) + Hard Equation (Gym 101853G ) + EXBSGS

    思路: 前两题题面相同,代码也相同,就只贴一题的题面了.这三题的意思都是求A^X==B(mod P),P可以不是素数,EXBSGS板子题. SPOJ3105题目链接:https://www.spoj. ...

  3. poj 3243 Clever Y

    转载请注明出处,谢谢http://blog.csdn.net/bigtiao097?viewmode=contents 题意: 给定A.B.C,求 Ax≡B(modC) A^x \equiv B( m ...

  4. poj 3243 Clever Y(Baby-Step Giant-Step)

    http://poj.org/problem?id=3243 继续做一下BSGS的题,不过这题有点表述不清,我认为题目应该描述为XY mod Z ≡ K,因为的这题AC算法是不用判断余数是否大于模的. ...

  5. 【POJ 3243】Clever Y 拓展BSGS

    调了一周,我真制杖,,, 各种初始化没有设为1,,,我当时到底在想什么??? 拓展BSGS,这是zky学长讲课的课件截屏: 是不是简单易懂.PS:聪哥说"拓展BSGS是偏题,省选不会考,信我 ...

  6. POJ3243 Clever Y 解 高次同余方程

    解高次同余方程A^x≡B(mod C)算法流程 S1:i从0到100循环,如果满足A^i≡B(mod C),那么i就为所求,否则继续S2: S2:令d=0,D=1,执行如下循环: while((tmp ...

  7. ACM 数学类题目推荐

    转:http://blog.sina.com.cn/s/blog_6635898a0100magq.html 1.burnside定理,polya计数法     这个大家可以看brudildi的< ...

  8. NOI数学:大步小步(Baby Step Giant Step,BSGS)算法

    BSGS算法求 高次同余方程:1.可爱的质数 2.计算器 BSGS算法求 高次同余方程:1.可爱的质数 2.计算器_啦啦啦32421的博客-CSDN博客 大步小步算法(BSGS)及扩展 & b ...

  9. 省选+NOI 第八部分 数论

    1.线性基 线性回归-线性基函数模型 线性回归-线性基函数模型_哔哩哔哩_bilibili 0219数论寒假作业选讲2[线性基] 0219数论寒假作业选讲2[线性基]_哔哩哔哩_bilibili 线性 ...

最新文章

  1. mac os 下 Android Studio设置真机调试
  2. AIX errdemon 命令
  3. After Keying for mac(AE头发细节优化还原抠像脚本)v1.04
  4. java顺序表和树的实现
  5. 四因素三水平正交试验表_正交实验设计过程
  6. 基于OpenCV的人脸识别考勤系统——创业计划书
  7. 第七次全国人口普查公报[1](第六号) ——人口受教育情况
  8. flink集成springboot案例_集成-Apache Flink+Spring Boot
  9. Andy’s First Dictionary(安迪的第一部词典)
  10. SQL Server Table Spool优化
  11. CCF-20170902-公共钥匙盒(30分)
  12. 细说jbd(journal-block-device) 源码分析
  13. C++智能指针之shared_ptr
  14. Win11怎么远程控制另外一台电脑?
  15. 基于android即时通信聊天系统
  16. 国内在线漫画快速发展,快看、Bilibili布局海外,国漫出海正当时
  17. vue 专题 vue2.0各大前端移动端ui框架组件展示
  18. android u盘盘符乱码,U盘里出现乱码文件的原因及多种解决方法
  19. Java 线程安全与锁优化
  20. 我的vim配置和solardark主题

热门文章

  1. 关于幂等性的解释和理解
  2. android 拍照裁剪以及本地图片裁剪工具类使用
  3. 十个前端UI优秀框架包含前端代码下载
  4. 美柚与MaxCompute数据同步架构说明
  5. Python实现批量修改图像大小尺寸
  6. 欧洲fba海运详解:欧洲fba海运怎么样?有哪些优势?
  7. 前端-如何将网页保存为图片
  8. Qt 之tree widget和treeView控件C++语言
  9. 黑马程序员—(iOS开发)C语言语法解析---(三)
  10. 富华力鼎:短视频拍摄技巧有哪些