【BZOJ2242】【SDoi2011】计算器 快速幂+EXGCD+BSGS
Description
Input
输入包含多组数据。
Output
Sample Input
3 1
2 1 3
2 2 3
2 3 3
【样例输入2】
3 2
2 1 3
2 2 3
2 3 3
【数据规模和约定】
对于100%的数据,1<=y,z,p<=10^9,为质数,1<=T<=10。
Sample Output
2
1
2
【样例输出2】
2
1
0
HINT
Source
#include <iostream>
#include <cstdio>
#include <cmath>
#include <map>
#define ll long long
using namespace std;
ll y,z,p; ll fast_pow(ll y,ll z,ll p)
{
ll ans=;
while (z)
{
if (z&) ans=ans*y%p;
y=y*y%p;
z>>=;
}
return ans;
} ll gcd(ll a,ll b)
{return b==?a:gcd(b,a%b);} void ex_gcd(ll a,ll b,ll &x,ll &y)
{
if (!b) {x=;y=;return;}
ex_gcd(b,a%b,x,y);
ll t=x; x=y; y=t-a/b*y;
} void solve1()
{
printf("%lld\n",fast_pow(y,z,p));
} void solve2()
{
ll d=gcd(y,p);
if (z%d) {printf("Orz, I cannot find x!\n");return;}
y/=d; z/=d;
ll a,b;
ex_gcd(y,p,a,b);
a=a*z%p;
while (a<) a+=p;
printf("%lld\n",a);
} void solve3()
{
y%=p,z%=p;
if (!y && !z) {puts(""); return;}
if (!y) {printf("Orz, I cannot find x!\n");return;}
map<ll,ll> mp;
mp.clear();
ll m=ceil(sqrt(p));
ll t=fast_pow(y,m,p),k=z%p;//直接m即可
for (int i=;i<m;i++)
{
if (!mp[k]) if (i) mp[k]=i;//注意变量,及时订正。
else mp[k]=-;
k=k*y%p;
}
k=;
for (int i=;i<m;i++)
{
if (mp[k])//注意!mp与mp的判断
{
if (mp[k]==-) mp[k]=;
printf("%lld\n",i*m-mp[k]);
return;
}
k=k*t%p;
}
printf("Orz, I cannot find x!\n");//各种傻
} int main()
{
int T,t;
scanf("%d%d",&T,&t);
while (T--)
{
scanf("%lld%lld%lld",&y,&z,&p);
if (t==) solve1();
if (t==) solve2();
if (t==) solve3();
}
}
【BZOJ2242】【SDoi2011】计算器 快速幂+EXGCD+BSGS的更多相关文章
- BZOJ 2242 [SDOI2011]计算器(快速幂+Exgcd+BSGS)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2242 [题目大意] 给出T和K 对于K=1,计算 Y^Z Mod P 的值 对于K=2 ...
- bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS
1:快速幂 2:exgcd 3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...
- BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )
没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...
- BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]
2242: [SDOI2011]计算器 题意:求\(a^b \mod p,\ ax \equiv b \mod p,\ a^x \equiv b \mod p\),p是质数 这种裸题我竟然WA了好多次 ...
- BZOJ2242 [SDOI2011]计算器
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)
污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...
- BZOJ2242[SDOI2011]计算器——exgcd+BSGS
题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给定y,z,p, ...
- bzoj2242: [SDOI2011]计算器 BSGS+exgcd
你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值:(快速幂) 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数:(exgcd) 3.给 ...
- BZOJ2242 [SDOI2011]计算器 【BSGS】
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 4741 Solved: 1796 [Submit][Sta ...
随机推荐
- 无废话ExtJs 入门教程六[按钮:Button]
无废话ExtJs 入门教程六[按钮:Button] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个按钮“提交”与重置.如下所示代码区的第68行位置, butt ...
- UVA11542 Square(高斯消元 异或方程组)
建立方程组消元,结果为2 ^(自由变元的个数) - 1 采用高斯消元求矩阵的秩 方法一: #include<cstdio> #include<iostream> #includ ...
- POJ1699 HDU 1560 Best Sequence(AC自动机 最短路)
曾写过迭代加深搜索的方法,现在使用在AC自动上跑最短路的方法 dp[i][j]表示状态为到节点i,模式串是否包含的状态为j的最短串的长度,则状态转移方程为: dp[nx][ny] = min(dp[x ...
- subversion安装使用
这里仅针对subversion进行说明,未完待续. 一.下载subversion并安装: a.subversion 要做svn服务器的必须装 b.Tortoisesvn 仅仅是访问svn服务器的客户端 ...
- 手机web页面制作时的注意事项
一.手机页面的标准头规范 字符编码使用utf-:指定页面手机内存缓存中的存储时间段 device-width:通知浏览器使用设备的宽度作为可视区的宽度 initial-scale - 初始的缩放比例 ...
- java调用shell获取返回值
转自:http://blog.csdn.net/tengdazhang770960436/article/details/12014839 1.shell文件return.sh echo 1 echo ...
- 初识RPC协议
什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如 ...
- XCL-Charts图表库简要教程及常见问题
这个Andriod图表库项目从开始至现在,热情消耗几近殆尽.还好已基本实现我想做的那些东西.趁还剩下点兴趣,把一些点非常简单的归纳一下. 所支持的图表类型: 基类 ...
- Loadrunner中参数化实战(9)-Unique+Once
参数化数据30条: 脚本如下,演示登录,投资,退出操作是,打印手机号: 首先验证Vugen中迭代: Unique+Once 设置迭代4次Action 结果如下:
- 编解码-protobuf
Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,Protobuf的优点. (1)在谷歌内部长期使用,产品成熟度高: (2)跨语言,支持多种语言,包括C++ ...