POJ 3243 Clever Y 扩展BSGS
http://poj.org/problem?id=3243
这道题的输入数据输入后需要将a和b都%p
https://blog.csdn.net/zzkksunboy/article/details/73162229
在大约sqrt( p )的复杂度求出 ( a^x ) % p = b % p中的x
扩展bsgs增加了对p不是素数的情况的处理。
扩展bsgs在处理过a,b,p之后进行bsgs的时候x处理不到num以下的部分,这部分在处理a,b,p的时候处理过了(b=1输出num)所以不用考虑。
所以实际上扩展bsgs和普通bsgs只多了一个处理的循环部分。
ac一次之后我又把多余的(非预处理循环内的)判定a==b和b==1的情况的部分删除了,也是对的,最开始在这些没必要的部分上纠结真是画蛇添足了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define LL long long
LL p,a,b;
map<LL,LL>q;
LL mgcd(LL x,LL y){return y==?x:mgcd(y,x%y);}
int main(){
while(~scanf("%lld%lld%lld",&a,&p,&b)){
if(a==&&p==&&b==)break;b=b%p;a=a%p;
LL x=,y=,t=,d=mgcd(a,p),ff=;
while(d!=){
if(b==){printf("%lld\n",t);ff=;break;}
if(b%d!=){printf("No Solution\n");ff=;break;}
++t;a/=d;b/=d;p/=d;
y=(y*a)%p;a=a*d;
d=mgcd(a,p);
}if(ff)continue;
a%=p;b%=p;
LL w=(LL)sqrt((double)p);if(w*w!=p)++w;
q[b]=-; for(int i=;i<=w;++i){x=(x*a)%p;LL z=(b*x)%p;q[z]=i;}
bool f=;LL m=10000000000000000LL;
for(int i=;i<=w;++i){
y=(y*x)%p;
if(q[y]!=){
LL z=q[y];if(z==-) z=;
z=(LL)i*w-z;f=;
m=min(z+t,m);
}
}
q[b]=;x=;
for(int i=;i<=w;++i){x=(x*a)%p;LL z=(b*x)%p;q[z]=;}
if(!f)printf("No Solution\n");
else printf("%lld\n",m);
}
return ;
}
POJ 3243 Clever Y 扩展BSGS的更多相关文章
- poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】
		
扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...
 - poj3243 Clever Y[扩展BSGS]
		
Clever Y Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8666 Accepted: 2155 Descript ...
 - bzoj 1467: Pku3243 clever Y 扩展BSGS
		
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...
 - 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
		
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
 - 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 Extended-Baby-Step-Giant-Step
		
题目大意:给定A,B,C,求最小的非负整数x,使A^x==B(%C) 传说中的EXBSGS算法0.0 卡了一天没看懂 最后硬扒各大神犇的代码才略微弄懂点0.0 參考资料: http://quarter ...
 - 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 高次方程
		
1 Accepted 8508K 579MS C++ 2237B/** hash的强大,,还是高次方程,不过要求n不一定是素数 **/ #include <iostream> #inclu ...
 
随机推荐
- fnmatch模块的使用
			
fnmatch模块的使用 此模块的主要作用是文件名称的匹配,并且匹配的模式使用的unix shell风格.fnmatch比较简单就4个方法分别是:fnmatch,fnmatchcase,filter, ...
 - python创建系统用户和用户组
			
#coding=utf8 import pwd import grp import sys from _utils.patrol2 import run_cmd info=None try: info ...
 - Windows CreateFont:创建自己的字体
			
原文地址:http://blog.csdn.net/softn/article/details/51718347 前面无论是使用文本输出函数还是 static 控件,字体都是默认的,比较丑陋,我们完全 ...
 - Jenkins实现定时、顺序编译
			
1 Jenkins实现定时.顺序编译 l Jenkins 编译流程:更新代码,编译公共服务,编译普通服务(普通服务依赖于公共服务).以下图为例,首先执行 update,再执行 icto_c ...
 - saltstack自动化运维系列②之saltstack的数据系统
			
saltstack自动化运维系列②之saltstack的数据系统 grains:搜集minion启动时的系统信息,只有在minion启动时才会搜集,grains更适合做一些静态的属性值的采集,例如设备 ...
 - 非root用户执行java进程报错:fork: retry:资源暂时不可用
			
vim /etc/security/limits.conf # End of file * soft nproc 65535 * hard ...
 - nagios系列(一)centos6.5环境部署nagios服务端
			
nagios软件安装包存放目录:/home/oldboy/tools nagios服务安装目录:/usr/local/nagios 1.配置yum源 echo "------ step 1: ...
 - Python源码学习(一)
			
考虑到性能的要求,我在工作中用的最多的是c/c++,然而,工作中又经常会有一些验证性的工作,这些工作对性能的要求并不高,反而对完成的效率要求更高,对于这样的工作,用一种开发效率高的语言是合理的想法,鉴 ...
 - 如何通过编译Linux内核打开IPVS(LVS)的debug模式
			
前言 为了定位keepalived VIP的问题, 一步一步定位到IPVS, IPVS默认是没有打开Debug模式的, 若需要打开Debug模式需要重新编译IPVS模块加载后才行, 最好的方式当然是仅 ...
 - (二)使用CXF开发WebService服务器端接口
			
CXF作为java领域主流的WebService实现框架,Java程序员有必要掌握它. CXF主页:http://cxf.apache.org/ 简介:百度百科 今天的话,主要是用CXF来开发下Web ...