【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 ...
随机推荐
- ArchLinux 安装笔记 --zz
为何安装 ArchLinux 为了更深层次的理解 Linux (其实只是闲的蛋疼 准备安装介质 U盘首选,没有之一.自己的本子是 MBR 的,UEFI 神马的我才不知道呢哼! 制作 U 盘启动: Li ...
- 【openGL】指定着色模型
#include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math ...
- 把VSO作为GitHub上JavaScript项目的免费CI服务器
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软变得更加开放后,走向开放的不仅有.NET运行时.IDE工具,还有ALM服务器核心组 ...
- 一些常用的C++标准函数
一些常用的C++标准函数 double atof(const char* p); int atoi(const char* p); long atol(const char* p); cstdlib ...
- 机器学习公开课笔记(5):神经网络(Neural Network)——学习
这一章可能是Andrew Ng讲得最不清楚的一章,为什么这么说呢?这一章主要讲后向传播(Backpropagration, BP)算法,Ng花了一大半的时间在讲如何计算误差项$\delta$,如何计算 ...
- 设定自动获得DNS服务器地址
情况说明:操作系统是Win7 64位, 网络是有线 1 2 3 4 5
- jbox使用总结
jbox是一个不错的插件 当使用get打开新页面的时候,可以使用h.对像ID来获得对像ID的值 Js代码 js代码: /** * @description: test * @author: BrinP ...
- windows下R语言在终端的运行
在windows下可以有多种方式来运行R,R导论的这些章节给出一些详细的指导. 通常在环境变量离包含R的安装目录类似于R\R-3.1.2\bin\x64的情况下,就可以在CMD下运行R程序了 注意我这 ...
- IMAGE_LOAD_CONFIG_DIRECTORY64 SafeSEH检测 表
IMAGE_LOAD_CONFIG_DIRECTORY64 typedef struct { DWORD Size; DWORD TimeDateStamp; WORD MajorVersion; W ...
- Linux学习笔记(3)Linux常用命令之文件处理命令
Linux的命令格式一般为:命令 [-选项] [参数],如ls -la /etc,需要注意几点:1)个别命令使用不遵循此格式:2)当有多个选项时,可以写在一起:3)存在简化选项(-)与完整选项,如-a ...