【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 ...
随机推荐
- Zookeeper 监视(Watches) 简介(转)
Zookeeper C API 的声明和描述在 include/zookeeper.h 中可以找到,另外大部分的 Zookeeper C API 常量.结构体声明也在 zookeeper.h 中,如果 ...
- NOIP2003加分二叉树[树 区间DP]
题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...
- VIM的强大功能
转发地址:http://coolshell.cn/articles/5426.html 简明 Vim 练级攻略 vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是 ...
- PAT 1028. 人口普查(20)
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...
- 035医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Service
这篇文章我们重点介绍Service层.因为Dao层就是用Gysypml逆向生成的Mapper就可以了.所以这里重点讲解Service层. 业务逻辑如下: 1:我们从前端页面传入有两个值:1:userg ...
- 条件变量pthread_cond_t怎么用
#include <pthread.h> #include <stdio.h> #include <stdlib.h> pthread_mutex_t mutex ...
- Web服务器之iis,apache,tomcat三者之间的比较
IIS-Apache-Tomcat的区别 IIS与Tomcat的区别 IIS是微软公司的Web服务器.主要支持ASP语言环境. Tomcat是Java Servlet 2.2和JavaServer P ...
- weblogic 10.x 上开发restful服务
之前已经学习过 利用JAX-RS快速开发RESTful 服务,当时是jboss环境,如果原封不动的迁移到weblogic 10.x 版本,会杯具的发现应用启动失败,需要做些小调整: 项目结构如下: 需 ...
- centos7下使用yum安装mysql数据库以及设置远程访问
CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1. 下载mysql的repo源 $ wget http://repo.mysql.com ...
- 20145221 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验
20145221 <信息安全系统设计基础>实验五 简单嵌入式WEB服务器实验 实验报告 队友博客:20145326蔡馨熠 实验博客:<信息安全系统设计基础>实验五 简单嵌入式W ...