Babystep算法。具体为什么,我也不太明白,好像资料不多。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; const int Maxn=65535; struct hash{
int a,b,next;
}Hash[Maxn*2];
int flag[Maxn+66];
int top,idx; void insert(int a,int b){
int k=b&Maxn;
if(flag[k]!=idx){
flag[k]=idx;
Hash[k].next=-1;
Hash[k].a=a;
Hash[k].b=b;
return ;
}
while(Hash[k].next!=-1){
if(Hash[k].b==b) return ;
k=Hash[k].next;
}
Hash[k].next=++top;
Hash[top].next=-1;
Hash[top].a=a;
Hash[top].b=b;
} int find(int b){
int k=b&Maxn;
if(flag[k]!=idx) return -1;
while(k!=-1){
if(Hash[k].b==b)
return Hash[k].a;
k=Hash[k].next;
}
return -1;
} int gcd(int a,int b){
return b==0? a:gcd(b,a%b);
} int ext_gcd(int a,int b,int &x,int &y){
int t,ret;
if(!b){
x=1; y=0;
return a;
}
ret=ext_gcd(b,a%b,x,y);
t=x; x=y; y=t-a/b*y;
return ret;
} int Inval(int a,int b,int n){
int x,y,e;
ext_gcd(a,n,x,y);
e=(long long )x * b%n;
return e<0?e+n:e;
} int pow_mod(long long a,int b,int c){
long long ret=1%c; a%=c;
while(b){
if(b&1)
ret=ret*a%c;
a=a*a%c;
b=b>>1;
}
return ret;
} int BabyStep(int A,int B,int C){
top=Maxn; ++idx;
long long buf=1%C,D=buf,K;
int i,d=0,tmp;
for(i=0;i<=100;buf=buf*A%C,i++){
if(buf==B)
return i;
}
while((tmp=gcd(A,C))!=1){
if(B%tmp) return -1;
++d;
C/=tmp;
B/=tmp;
D=D*A/tmp%C;
}
int M=(int)ceil(sqrt((double)C));
for(buf=1%C,i=0; i<= M; buf=buf*A%C,i++){
insert(i,buf);
}
for(i=0,K=pow_mod((long long )A,M,C);i<=M;D=D*K%C,i++){
tmp=Inval((int)D,B,C); int w;
if(tmp>=0&&(w=find(tmp))!=-1)
return i*M+w+d;
}
return -1;
} int main(){
int A,B,C;
while(scanf("%d%d%d",&A,&C,&B)!=EOF&&A||B||C){
B=B%C;
// idx=0; 此处初始后竟然错了,看来真想不明白babystep的为什么了
int ans=BabyStep(A,B,C);
if(ans==-1) printf("No Solution\n");
else printf("%d\n",ans);
}
return 0;
}

  

POJ 3243的更多相关文章

  1. 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 ...

  2. POJ 3243 Clever Y 扩展BSGS

    http://poj.org/problem?id=3243 这道题的输入数据输入后需要将a和b都%p https://blog.csdn.net/zzkksunboy/article/details ...

  3. poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】

    扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...

  4. 【POJ 3243】Clever Y 拓展BSGS

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

  5. POJ 3243 Clever Y(离散对数-拓展小步大步算法)

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

  6. poj 3243 Clever Y 高次方程

    1 Accepted 8508K 579MS C++ 2237B/** hash的强大,,还是高次方程,不过要求n不一定是素数 **/ #include <iostream> #inclu ...

  7. [POJ 3243]Clever Y

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

  8. poj 3243 扩展BSGS

    每次把gcd(a,c)提到前面,直到a,c互质,然后就是普通BSGS了 #include<cstdio> #include<cstring> #include<iostr ...

  9. POJ 3243 // HDU 2815(改下输出,加个判断)

    A^x = B (mod C) 的模板题,不够要用扩展BSGS (虽然AC,但完全理解不了模板0.0,以后学好数学在来慢慢理解555555) #include <iostream> #in ...

  10. POJ 3243 Clever Y | BSGS算法完全版

    题目: 给你A,B,K 求最小的x满足Ax=B (mod K) 题解: 如果A,C互质请参考上一篇博客 将 Ax≡B(mod C) 看作是Ax+Cy=B方便叙述与处理. 我们将方程一直除去A,C的最大 ...

随机推荐

  1. 【LeetCode OJ 268】Missing Number

    题目链接:https://leetcode.com/problems/missing-number/ 题目:Given an array containing n distinct numbers t ...

  2. servlet 处理过程

    刚才花了一个小时找 servlet 的一个错误.终于找出来了,也大概明确 tomcat server对请求的处理顺序.以下做简单总结: 浏览器发送请求,传给 tomcat 在此请求地址指向的文件中定义 ...

  3. 表格td内容过多时,td显示省略号,鼠标移入显示全部内容。

    转自:https://blog.csdn.net/weixin_42193908/article/details/80405014 两种方式显示: 1.title方式显示: <!DOCTYPE ...

  4. 如何提升SQL语句的查询性能

    在对数据库进行操作时,如果SQL语句书写不当,对程序的效率会造成很大影响. 提高SQL效率可以从一下几个方面入手: 1,数据库设计与规划 Primary Key字段的长度尽量小,能用small int ...

  5. 利用python开发的flappy bird 游戏

    python 中 pygame模块能让我们很方便的编写游戏,16年我用python 仿制了flappy bird 游戏,下面是游戏的完整代码以及素材,分享给大家. 第一个python文件,flappy ...

  6. BZOJ 4259 FFT

    思路: 为什么好多字符串的题都可以用FFT啊.... 我们其实是要判断$\Sigma (a[i]-b[i])^2*a[i]*b[i]==0$ 那就把a串翻转过来 把 上式展开 大力做几遍FFT就好啦~ ...

  7. C - Young Physicist

    Problem description A guy named Vasya attends the final grade of a high school. One day Vasya decide ...

  8. pinpoint体系中,关于如何清理过期hbase数据

    版本: pinpoint:1.7.1 hbase:1.2.6 命令行命令: $HBASE_HOME/bin/hbase shell    newrestruct.hbase 备注:保留一天半的数据(秒 ...

  9. vue中子组件需调用父组件通过异步获取的数据

    原因:子组件需要调用父组件传过来的数据,如果这个数据是异步从接口里取的,那这个组件在任何生命周期里都取不到,而应该在接口调取后取到. 需要在msg拿到值后才调用组件,然后你在生命周期created里面 ...

  10. mysql数据库索引原理及其常用引擎对比

    索引原理 树数据结构及其算法简介 B+/-树: - 多路搜索树; - 时间复杂度O(logdN);h为节点出度,d为深度 红黑树: - 节点带有颜色的平衡二叉树 - 时间复杂度O(log2N);h节点 ...