【POJ 3243】Clever Y 拓展BSGS
调了一周,我真制杖,,,
各种初始化没有设为1,,,我当时到底在想什么???
拓展BSGS,这是zky学长讲课的课件截屏:
是不是简单易懂。PS:聪哥说“拓展BSGS是偏题,省选不会考,信我没错”,那是因为聪哥早就会了,所以他觉得学这个没用,信他才怪233
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
LL A,B,C;
struct node{
static const int mo=100007;
LL a[mo],v[mo];
void clear() {memset(a,-1,sizeof(a));}
LL find(LL val){
LL pos=(val%mo+mo)%mo;
while ((a[pos]!=val)&&(a[pos]!=-1)) pos=(pos+1)%mo;
return pos;
}
void insert(int val,int x){
LL pos=find(val);
if ((a[pos]==-1)||(a[pos]==val)){
a[pos]=val; v[pos]=x;
}
}
LL get(LL val){
LL pos=find(val);
return a[pos]==val?v[pos]:-1;
}
}hash;
LL gcd(LL x,LL y) {LL r=x%y; while (r!=0){x=y; y=r; r=x%y;} return y;}
void exgcd(LL aa,LL bb,LL &x, LL&y){
if (bb==0){
x=1; y=0; return;
}
exgcd(bb,aa%bb,x,y);
LL t=y;
y=x-aa/bb*y;
x=t;
}
LL ni(LL a,LL b){
LL x,y;
exgcd(a,b,x,y);
return (x+C)%C;
}
LL ipow(LL a,LL b,LL c){
LL ans=1,t=a;
while (b){
if (b%2==1) ans=(ans*t)%c;
t=(t*t)%C; b/=2;
}
return ans;
}
void bsgs(){
B%=C;
if (B==1) {puts("0"); return;}
else if ((A==0)&&(B==0)) {puts("1"); return;}
else if (B==0) {puts("No Solution"); return;}
LL t=1;
for(LL i=0;i<=50;++i){
if (t==B){
printf("%I64d\n",i);
return;
}
t=(t*A)%C;
}
LL g,ans1=0,D=1;
while ((g=gcd(A,C))!=1){
if (B%g){
puts("No Solution");
return;
}
++ans1;
B/=g;
C/=g;
D=(A/g*D)%C;
}
D=ni(D,C);
LL m=ceil(sqrt((double)C));
hash.clear();
t=B*D%C;
for(LL i=0;i<=m;++i){
hash.insert(t,i);
t=(t*A)%C;
}
LL basic=ipow(A,m,C);
t=1;
for(LL i=0;i<=m;++i){
int x=hash.get(t);
if (x!=-1){
printf("%I64d\n",ans1+i*m-x);
return;
}
t=(t*basic)%C;
}
puts("No Solution");
}
int main(){
while (scanf("%I64d %I64d %I64d\n",&A,&C,&B)){
if ((A==0)&&(B==0)&&(C==0)) break;
bsgs();
}
return 0;
}
这样就可以啦
【POJ 3243】Clever Y 拓展BSGS的更多相关文章
- POJ 3243 Clever Y 扩展BSGS
http://poj.org/problem?id=3243 这道题的输入数据输入后需要将a和b都%p https://blog.csdn.net/zzkksunboy/article/details ...
- POJ 3243 Clever Y (求解高次同余方程A^x=B(mod C) Baby Step Giant Step算法)
不理解Baby Step Giant Step算法,请戳: http://www.cnblogs.com/chenxiwenruo/p/3554885.html #include <iostre ...
- poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】
扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...
- POJ 3243 Clever Y | BSGS算法完全版
题目: 给你A,B,K 求最小的x满足Ax=B (mod K) 题解: 如果A,C互质请参考上一篇博客 将 Ax≡B(mod C) 看作是Ax+Cy=B方便叙述与处理. 我们将方程一直除去A,C的最大 ...
- POJ 3243 Clever Y(离散对数-拓展小步大步算法)
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
- [POJ 3243]Clever Y
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
- POJ 3243 Clever Y Extended-Baby-Step-Giant-Step
题目大意:给定A,B,C,求最小的非负整数x,使A^x==B(%C) 传说中的EXBSGS算法0.0 卡了一天没看懂 最后硬扒各大神犇的代码才略微弄懂点0.0 參考资料: http://quarter ...
- poj 3243 Clever Y 高次方程
1 Accepted 8508K 579MS C++ 2237B/** hash的强大,,还是高次方程,不过要求n不一定是素数 **/ #include <iostream> #inclu ...
- poj3243 Clever Y[扩展BSGS]
Clever Y Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8666 Accepted: 2155 Descript ...
随机推荐
- NYOJ-756重建二叉树
重建二叉树 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!). 输入 输入有多组数据(少于 ...
- NYOJ-取石子(六)
取石子(六) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 最近TopCoder的PIAOYI和HRDV很无聊,于是就想了一个游戏,游戏是这样的:有n堆石子,两个人轮流 ...
- C# 事件编程在游戏开发的应用
2D碰撞检测:http://wenku.baidu.com/view/45544cfcfab069dc50220145.html 1.Action System.Action 等于快捷创建一个委托 2 ...
- Unity 碰撞器
Unity引擎的碰撞器 常见的有Box Collider,Capsule Collider等等 IsTrigger(触发器) 在这些碰撞器中有一个属性 Is Trigger(是否使用触发器) 触发器事 ...
- Code! MVC 5 App with Facebook, Twitter, LinkedIn and Google OAuth2 Sign-on (C#)
http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2- ...
- 在脚本中使用export导出变量值
LD_LIBRARY_PATH环境变量可以用于设置Linux动态库的位置,常见的用法如export LD_LIBRARY_PATH=/home/username/foo:$LD_LIBRARY_PAT ...
- css的小问题总结
1.居中问题 比如让宽度为60%的<div class="box">居中,可以再.box里面设置margin:auto 2.高度固定的div里面有两个子类div且高度和 ...
- Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. ...
- [JAVA教程] 2016年最新spring4框架搭建视频教程 【尚学堂】
Spring4框架 主讲:邹波 类型:SSH 适合对象:学习完javase.数据库技术.jdbc者 Spring4.0作为一个广泛使用的开源框架,它由Rod Johnson创建.它是为了解决企业应用开 ...
- Eclipse工作常见问题总结
一.Eclipse常见快捷键使用 自动完成单词:Alt+/ 重命名:Shift+Alt+r(统一改变字段或方法名) 生成getter/setter方法: Shift+Alt+s,然后r 删除当前行:C ...