http://www.lydsy.com/JudgeOnline/problem.php?id=2242

题意:(前两个问略...)第三个问是,求$a^x \equiv b \pmod{p}$最小的$x$,或者输出无解,它们范围都是$10^9$哒= =

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
int mpow(ll a, ll b, ll p) {
ll r=1; a%=p;
while(b) { if(b&1) r=((ll)r*a)%p; a=((ll)a*a)%p; b>>=1; }
return r;
}
void gcd(ll a, ll b, ll &d, ll &x, ll &y) {
if(!b) { d=a; x=1; y=0; return; }
gcd(b, a%b, d, y, x); y-=a/b*x;
}
void ni(ll a, ll b, ll p) {
ll d, x, y, t;
gcd(a, p, d, x, y); if(b%d) { puts("Orz, I cannot find x!"); return; }
t=p/d;
while(x<0) x+=t;
while(x>=t) x-=t;
printf("%lld\n", (x*b)%p);
}
map<int, int> s;
void bsgs(ll y, ll z, ll p) {
y%=p; z%=p;
if(z==1) { puts("0"); return; }
if(!y && !z) { puts("1"); return; }
if(!y) { puts("Orz, I cannot find x!"); return; }
s.clear();
int m=sqrt(p+0.5), t=1, w=y;
for(int i=0; i<m; ++i) s[((ll)z*t)%p]=i, t=((ll)t*w)%p;
w=mpow(y, m, p); y=1; t=(p-1)/m+1; bool flag=1;
for(int i=0; i<=t; ++i) if(s.count(y)) { printf("%lld\n", (ll)m*i-s[y]); flag=0; break; } else y=((ll)y*w)%p;
if(flag) puts("Orz, I cannot find x!");
}
int main() {
int z, y, p, c, T;
scanf("%d%d", &T, &c);
while(T--) {
scanf("%d%d%d", &y, &z, &p);
if(c==1) printf("%d\n", mpow(y, z, p));
else if(c==2) ni(y, z, p);
else bsgs(y, z, p);
}
return 0;
}

  


bsgs裸题....其实就是一种分块思想..(为啥有那么牛的名字呢= =其实是我不想加分类了= =)即小块暴力然后大块就解决的思想,相信你们都能秒懂= =

要求

$$a^x \equiv b \pmod{p}$$

的最小的$x$,那么

首先我们随便选一个$m$,使得$x=km-t, 0<=t<m$,(这虽然有点区别于取余,但是这是为了方便= =)

然后推得

$$a^{km} \equiv ba^t \pmod{p}$$

然后就是右边暴力预处理,左边枚举$k$...由于枚举$k$复杂度是$O(n/m)$,显然取$m=\sqrt{n}$最优= =...由于懒,开个set记录右边= =于是总复杂度是$O(\sqrt{n}log(\sqrt{n}))$

哦最后忘记一件事= =要特判啊= =比如说$b=1$显然$x=0$啊,而且取模了$a, b$后注意特判$a=0$的情况啊= =关于一些情况没特判的同学= =我要hack你们...比如数据

1 3
4 1 2

【BZOJ】2242: [SDOI2011]计算器的更多相关文章

  1. bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...

  2. BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )

    没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...

  3. BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]

    2242: [SDOI2011]计算器 题意:求\(a^b \mod p,\ ax \equiv b \mod p,\ a^x \equiv b \mod p\),p是质数 这种裸题我竟然WA了好多次 ...

  4. bzoj 2242 [SDOI2011]计算器(数论知识)

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  5. BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)

    同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...

  6. BZOJ 2242 [SDOI2011]计算器(快速幂+Exgcd+BSGS)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2242 [题目大意] 给出T和K 对于K=1,计算 Y^Z Mod P 的值 对于K=2 ...

  7. bzoj 2242 [SDOI2011]计算器——BSGS模板

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一道BSGS! 咳咳,我到底改了些什么?…… 感觉和自己的第一版写的差不多……可能是 ...

  8. BZOJ 2242 [SDOI2011]计算器 BSGS+高速幂+EXGCD

    题意:id=2242">链接 方法: BSGS+高速幂+EXGCD 解析: BSGS- 题解同上.. 代码: #include <cmath> #include <c ...

  9. bzoj 2242: [SDOI2011]计算器

    #include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...

  10. [原博客] BZOJ 2242 [SDOI2011] 计算器

    题目链接 noip级数论模版题了吧.让求三个东西: 给定y,z,p,计算`Y^Z Mod P` 的值. 给定y,z,p,计算满足`xy≡ Z ( mod P )`的最小非负整数. 给定y,z,p,计算 ...

随机推荐

  1. 设计模式学习之中介者模式(Mediator,行为型模式)(18)

    转载地址:http://www.cnblogs.com/zhili/p/MediatorPattern.html 一.引言 在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信 ...

  2. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. 【计算机图形学】openGL常用函数

    OpenGL常用函数   glAccum 操作累加缓冲区   glAddSwapHintRectWIN 定义一组被 SwapBuffers拷贝的三角形   glAlphaFunc允许设置alpha检测 ...

  4. scrollTop和scrollLeft的兼容解决万全方法

    1.各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用  document.body.scrollTop 来获取 scrollTop高度 : 对于有do ...

  5. jq获取鼠标位置

    jq获取鼠标位置 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  6. phpcms V9实现wap上一篇、下一篇功能

    在phpcms\modules\wap\index.php里面,搜索上面这句 if(!$r || $r['status'] != 99) showmessage(L('info_does_not_ex ...

  7. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  8. PMP 第三章 单个项目的项目管理标准

    1 项目管理五大过程组分别是什么? 启动过程组 规划过程组 执行过程组 监控过程组 收尾过程组 2 启动项目组是干什么?包含哪些过程?每个阶段都需要启动吗? 启动过程组:获得授权,定义一个新项目或现有 ...

  9. 十天来学习java的心得体会

    有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...

  10. N种内核注入DLL的思路及实现

    内核注入,技术古老但很实用.现在部分RK趋向无进程,玩的是SYS+DLL,有的无文件,全部存在于内存中.可能有部分人会说:"都进内核了.什么不能干?".是啊,要是内核中可以做包括R ...