spoj3105 BSGS拓展版+离散对数
来源:互联网 发布:python thinter视频 编辑:程序博客网 时间:2024/06/07 17:46
题目大意:求使得
思路:任意一个
x=x`+1
Code:
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<map>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long ll;ll a,b,p;ll gcd(int a,int b) {return b==0?a:gcd(b,a%b);}ll qpow(ll a,ll b,ll mod){ ll ret=1; for(ll i=b;i;i>>=1,a=(a*a)%mod) { if(i&1) ret*=a,ret%=mod; } return ret;} ll BSGS(){ a%=p;b%=p; if(b==1) return 0; ll cnt=0,t=1; for(ll g=gcd(a,p);g!=1;g=gcd(a,p)) { if(b%g) return -1; p/=g;b/=g;t=t*(a/g)%p; cnt++; if(t==b) return cnt; } map<int,int>hash; ll m=ll(sqrt(1.0*p)+1), base=qpow(a,m,p),now=t,tmp=b; for(int i=0;i<m;i++,tmp=(tmp*a)%p) { hash[tmp]=i; } for(int i=1;i<=m+1;i++) { now=now*base%p; if(hash.count(now)) { return i*m-hash[now]+cnt; } } return -1;}int main(){ while(scanf("%lld%lld%lld",&a,&p,&b)) { if(a==b&&b==p&&a==0) break; ll ans=BSGS(); ans==-1?puts("No Solution"):printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- spoj3105 BSGS拓展版+离散对数
- BSGS+原根+离散对数
- 【EXT-BSGS算法求离散对数】POJ Clever Y 3243
- 【BSGS求离散对数】HDU Mod Tree 2815
- UVA 11916 Emoogle Grid(离散对数、BSGS算法)
- 求解离散对数——BSGS算法の板子
- POJ 2417 Discrete Logging(离散对数 BSGS)
- POJ-2417 Discrete Logging (BSGS算法,离散对数)
- 【哈希表除留余数法+BSGS算法求离散对数】POJ Discrete Logging 2417
- BSGS模版(求解离散对数,模数p是不是质数都可以)
- 离散对数,giant-step baby-step,拓展giant-step baby-step (poj 2417, hdu 2815)
- 离散对数问题
- 离散对数加密算法
- 离散对数问题
- POJ 2417 离散对数
- HDU 2815 离散对数
- 求离散对数
- 离散对数加密算法
- A Secret 2017 CCPC 网络选拔赛 hdu 6153
- 日常培训一些记录
- C设计模式
- 关于使用MSCOMM32.OCX控件心得及js调用实例
- TensorFlow配置日志等级
- spoj3105 BSGS拓展版+离散对数
- 函数返回值-return详解及应用
- 其他
- android studio启动模拟器弹出错误提示
- Java中的递归算法
- hdu3911 线段树~~区间合并(超详细讲解)
- Gif录制神器GifCam
- 密码学:加密基础
- springMVC深入理解