BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,,

现在才会hash是不是太弱了,,,

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
static const int mo=100007;
int a[100010],v[100010];
node() {memset(a,-1,sizeof(a));}
int find(int val){
int pos=(val%mo+mo)%mo;
while ((a[pos]!=val)&&(a[pos]!=-1)) pos=(pos+1)%mo;
return pos;
}
void insert(int val,int x){
int pos=find(val);
if ((a[pos]==-1)||(a[pos]==val)){
a[pos]=val;
v[pos]=x;
}
}
int get(int val){
int pos=find(val);
return a[pos]==val?v[pos]:-1;
}
void clear() {memset(a,-1,sizeof(a));}
}hash;
int T,L;
inline int work1(int a,int b,int n){
long long t=a,ans=1;
while (b){
if (b%2==1) ans=(ans*t)%n;
b=b/2;
t=(t*t)%n;
}
return (int)ans;
}
inline int exgcd(int a,int b,int &x,int &y){
if (b==0){
x=1; y=0; return a;
}else{
int r=exgcd(b,a%b,x,y);
int t=y;
y=x-a/b*y;
x=t;
return r;
}
}
inline void work2(int a,int b,int n){
int x,y;
int d=exgcd(a,n,x,y);
if (b%d) puts("Orz, I cannot find x!\n");
else printf("%d\n",(int)((((long long)x*b/d%n)+n)%n));
}
inline void work3(int a,int b,int n){
if ((a%n==0)&&(b!=0)) {puts("Orz, I cannot find x!\n"); return;}
hash.clear();
int m=ceil(sqrt(n));
long long t=b%n;
for(int i=0;i<=m;++i){
hash.insert((int)t,i);
t=(t*a)%n;
}
int s=work1(a,m,n); t=s;
for(int i=1;i<=m;++i){
int v=hash.get((int)t);
if (v!=-1) {printf("%d\n",i*m-v); return;}
t=(t*s)%n;
}
puts("Orz, I cannot find x!\n");
}
int main(){
scanf("%d %d\n",&T,&L);
int y,z,p,a,b;
switch (L){
case 1:
while (T--){
scanf("%d %d %d\n",&y,&z,&p);
printf("%d\n",work1(y,z,p));
}
break;
case 2:
while (T--){
scanf("%d %d %d\n",&y,&z,&p);
work2(y,z,p);
}
break;
case 3:
while (T--){
scanf("%d %d %d\n",&y,&z,&p);
work3(y,z,p);
}
break;
}
return 0;
}

这样就可以啦

【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法的更多相关文章

  1. BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)

    污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...

  2. bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS

    1:快速幂  2:exgcd  3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...

  3. 【bzoj2242】: [SDOI2011]计算器 数论-快速幂-扩展欧几里得-BSGS

    [bzoj2242]: [SDOI2011]计算器 1.快速幂 2.扩展欧几里得(费马小定理) 3.BSGS /* http://www.cnblogs.com/karl07/ */ #include ...

  4. 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得

    [bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1)  就好 ...

  5. poj 1845 【数论:逆元,二分(乘法),拓展欧几里得,费马小定理】

    POJ 1845 题意不说了,网上一大堆.此题做了一天,必须要整理一下了. 刚开始用费马小定理做,WA.(poj敢说我代码WA???)(以下代码其实都不严谨,按照数据要求A是可以等于0的,那么结果自然 ...

  6. Looooops(求解同余方程、同余方程用法)【拓展欧几里得】

    Looooops(点击) A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; ...

  7. [zoj 3774]Power of Fibonacci 数论(二次剩余 拓展欧几里得 等比数列求和)

    Power of Fibonacci Time Limit: 5 Seconds      Memory Limit: 65536 KB In mathematics, Fibonacci numbe ...

  8. Codeforces 898 B(拓展欧几里得)

    Proper Nutrition 题意:有n元钱,有2种单价不同的商品,是否存在一种购买方式使得钱恰好花光,如果有输入任意一种方式,如果没有输出“NO” 题解:可以使用拓展欧几里得快速求解. #inc ...

  9. NOIP2012拓展欧几里得

    拉板题,,,不说话 我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了 先来一发欧几里得拓展裸 #include <cstdio> void gcd ...

随机推荐

  1. 洛谷⑨月月赛Round2 P3392涂国旗[DP]

    题目描述 某国法律规定,只要一个由N*M个小方块组成的旗帜符合如下规则,就是合法的国旗.(毛熊:阿嚏——) 从最上方若干行(>=1)的格子全部是白色的. 接下来若干行(>=1)的格子全部是 ...

  2. 第14章 位图和位块传输_14.4 GDI位图对象(1)

    14.4.1 创建DDB (1)创建 HBITMAP= CreateBitmap(cx,cy,cPlanes,cBitsPixel,lpBits); 参数 说明 cx,cy 指定位图宽度和高度,单位为 ...

  3. Unity实现刺客信条灯光的思路探究

    灯光需求 类似刺客信条的开场CG动画,场景中打着酷炫的灯光,玩家在场景中行走可以感受到灯光很真实. 参考视频:http://www.iqiyi.com/w_19rqytbmvt.html 运行环境 安 ...

  4. Android平台的一些常用命令

    一.Android常见目录结构 1.  apk文件在/data/app目录下 2.  /data/data/[package.name]目录,存放程序数据缓存等等 3.SD卡安装方式的,则在/mnt/ ...

  5. 夯实基础之php学习-2提高篇

    1,Jpgraph, 详见Php图形化jpgraph 2,文件系统 文件的操作步骤:打开文件->操作文件->关闭文件 打开文件fopen(filename,mode) 关闭文件fclose ...

  6. Types of intraclass correlation coefficience (ICC)

    Reference: Andellini M, Cannatà V, Gazzellini S, et al. Test-retest reliability of graph metrics of ...

  7. 设置select默认值

    W3C下设置一个默认值直接为 select.value='默认值'. IE8下设置默认值必须有这个option才能被设置,不像W3C 如chrome这种,直接设置就能显示,如果IE下这样设置的话sel ...

  8. Linux下源码安装ffmpeg及ffmpeg的简单使用说明

    一.编译安装 ffmpeg在安装时依赖的包和版本都很让人头疼,不同编译环境也各不相同.公司之前封装了一个又各种出错. 其实办法很简单,就是到官网一步一步按着做就行了:http://trac.ffmpe ...

  9. Spring Security笔记:自定义登录页

    以下内容参考了 http://www.mkyong.com/spring-security/spring-security-form-login-example/ 接上回,在前面的Hello Worl ...

  10. UML:类图复习-鸡生蛋,蛋生鸡

    这是前一阵<高级软件工程>课堂上,老师随堂出的一道讨论题,随手贴在这里: ps: 今天是520,正好聊一些OoXx,关于爱的扯淡话题:) 题目:“鸡生蛋,蛋孵鸡”,世间万物生生不息,如何用 ...