P2485 [SDOI2011]计算器
P2485 [SDOI2011]计算器
题目描述
你被要求设计一个计算器完成以下三项任务:
1、给定y、z、p,计算y^z mod p 的值;
2、给定y、z、p,计算满足xy ≡z(mod p)的最小非负整数x;
3、给定y、z、p,计算满足y^x ≡z(mod p)的最小非负整数x。
为了拿到奖品,全力以赴吧!
输入输出格式
输入格式:
输入文件calc.in 包含多组数据。
第一行包含两个正整数T、L,分别表示数据组数和询问类型(对于一个测试点内的所有数
据,询问类型相同)。
以下T 行每行包含三个正整数y、z、p,描述一个询问。
输出格式:
输出文件calc.out 包括T 行.
对于每个询问,输出一行答案。
对于询问类型2 和3,如果不存在满足条件的,则输出“Orz, I cannot find x!”。
输入输出样例
3 1
2 1 3
2 2 3
2 3 3
2
1
2
3 2
2 1 3
2 2 3
2 3 3
2
1
0
4 3
2 1 3
2 2 3
2 3 3
2 4 3
0
1
Orz, I cannot find x!
0
说明

分析
三个模板,
- 快速幂,
- 求yx=z(mod p),转化成,yx-kp = z;可以用扩展欧几里得求解,并且要求z%gcd(y,p)!=0,(扩展欧几里得求ax+by=c:http://www.cnblogs.com/MashiroSky/p/5912977.html), 补充:因为p是质数,所以可以用费马小定理, p是质数,y与p互质,所以y有逆元,x=y^(-1)*z,y^(-1)=y^(p-2),因为0没有逆元,所以只有y=0时无解
- bsgs
注意,int与longlong类型,结尾的换行符
code
#include<iostream>
#include<cstdio>
#include<map>
#include<cmath> using namespace std;
typedef long long LL;
map<int,int>mp; int ksm(int a,int p,int mod)
{
int now = ;
while (p)
{
if (p&)
now = 1ll*now*a%mod;
a = 1ll*a*a%mod;
p = p>>;
}
return now;
}
int exgcd(int a,int b,int &x,int &y)
{
if (b==)
{
x = , y = ;
return a;
}
int r = exgcd(b,a%b,x,y);
int t = x;
x = y;
y = t-(a/b)*y;
return r;
}
void bsgs(int a,int b,int p)
{
int m,t,ans,now;
if (a%p==&&b==)
{
printf("1\n");return ;
}
if (a%p==)
{
printf("Orz, I cannot find x!\n");return ;
}
mp.clear();
m = ceil(sqrt(p));
now = b%p;
mp[now] = ;
for (int i=; i<=m; ++i)
{
now = (1ll*now*a)%p;
mp[now] = i;
}
t = ksm(a,m,p);
now = ;
for (int i=; i<=m; ++i)
{
now = (1ll*now*t)%p;
if (mp[now])
{
ans = i*m-mp[now];
printf("%d\n",(ans%p+p)%p);
return ;
}
}
printf("Orz, I cannot find x!\n");
}
int main()
{
int t,k,a,b,c;
scanf("%d%d",&t,&k);
if (k==)
{
for (int i=; i<=t; ++i)
scanf("%d%d%d",&a,&b,&c),printf("%d\n",ksm(a,b,c));
}
else if (k==)
{
int x,y;
for (int i=; i<=t; ++i)
{
scanf("%d%d%d",&a,&b,&c);
int d = exgcd(a,c,x,y);
if (b%d!=) printf("Orz, I cannot find x!\n"); //换行符
else
{
x = 1ll*x*(b/d)%c;
x = (x%(c/d)+c/d)%(c/d);
printf("%d\n",x);
}
}
}
else
{
for (int i=; i<=t; ++i)
scanf("%d%d%d",&a,&b,&c),bsgs(a,b,c);
}
return ;
}
P2485 [SDOI2011]计算器的更多相关文章
- 洛谷 P2485 [SDOI2011]计算器 解题报告
P2485 [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最 ...
- luogu P2485 [SDOI2011]计算器
题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最小非负整数x: 3.给定y.z.p,计算 ...
- 洛谷P2485 [SDOI2011]计算器(exgcd+BSGS)
传送门 一题更比三题强 1操作直接裸的快速幂 2操作用exgcd求出最小正整数解 3操作用BSGS硬上 然后没有然后了 //minamoto #include<cstdio> #inclu ...
- BZOJ 2242 / Luogu P2485 [SDOI2011]计算器 (BSGS)
type 1type\ 1type 1 就直接快速幂 type 2type\ 2type 2 特判+求逆元就行了. type 3type\ 3type 3 BSGS板 CODE #include< ...
- bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...
- 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了好多次 ...
- BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS
BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS 题意: 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p, ...
- 【bzoj2242】[SDOI2011]计算器
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3207 Solved: 1258[Submit][Statu ...
随机推荐
- 去除pycharm的波浪线
PyCharm使用了较为严格的PEP8的检查规则,如果代码命名不规范,甚至多出的空格都会被波浪线标识出来,导致整个编辑器里铺满了波浪线,右边的滚动条也全是黄色或灰色的标记线,很是影响编辑.这里给大家分 ...
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第十四天(非原创)
文章大纲 一.淘淘商城总体架构介绍二.淘淘商城重要技术点总结三.项目常见面试题四.项目学习(all)资源下载五.参考文章 一.淘淘商城总体架构介绍 1. 功能架构 2. 技术选型 (1)Sprin ...
- JVM虚拟机 - Class类文件结构
概述 Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎都是程序运行的必要数据 ...
- 淘宝H5移动端解决方案
详细:http://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html ; (function(win, lib) { var doc ...
- Ubuntu 安装boost 库
使用 apt-get进行安装 sudo apt-get install libboost-dev
- WPF:鼠标长时间无操作,窗口隐藏
//设置鼠标长时间无操作计时器 private System.Timers.Timer MouseTimerTick = new System.Timers.Timer(10000); private ...
- python 之开发工具 sublimetext 3
一.前言 由于个人工作内容太过于繁杂,记忆力又不好,为日后使用的方便,故简单的记录了本篇关于sublimetext 3的初始化安装和部分插件内容的记录.目前最新的版本也是3.0以上版本了,故我这里使用 ...
- 新版graylog2安装过程
Graylog是一个开源的 log 收容器,背后的储存是搭配 mongodb,而搜寻引擎则由 elasticsearch 提供.以前版本主要有两个部分集合而成 server 与 web interfa ...
- shp格式数据发布服务:postGIS + postgresql + geoserver
主要流程: ①使用postgresql创建数据库 ②下载安装postgis插件 ③在创建的数据库中使用postgis插件,执行下列语句 CREATE EXTENSION postgis; CREATE ...
- 3218: 字符串字符统计—C语言
3218: 字符串字符统计—C语言 时间限制: 1 Sec 内存限制: 128 MB提交: 270 解决: 129[提交][状态][讨论版][命题人:smallgyy] 题目描述 编写一函数,由实 ...