题目描述

你被要求设计一个计算器完成以下三项任务:

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!”。

输入输出样例

输入样例#1:

3 1
2 1 3
2 2 3
2 3 3
输出样例#1:

2
1
2
输入样例#2:

3 2
2 1 3
2 2 3
2 3 3
输出样例#2:

2
1
0
输入样例#3:

4 3
2 1 3
2 2 3
2 3 3
2 4 3
输出样例#3:

0
1
Orz, I cannot find x!
0

说明

本蒟蒻调了一下午样例,一个都没过

然后交上去ac,

突然意识到windows的 lld 和 I64d似乎从来没准过,orz orz 并且快速幂不知道怎么也写炸了

第一问,水 快速幂+mod

第二问,可用exgcd求,

当z为gcd(a,p)的倍数时才有解。

第三问,用bsgs(拔山盖世)求的是离散对数

具体可以自行百度。

 #include<cstdio>
#include<map>
#include<cmath>
using namespace std; typedef long long LL;
int T,L; LL qpow(LL a,LL p,LL mod)
{
LL base=a;
LL sum=;
while(p!=)
{
if(p&)
sum=(sum*base)%mod;
base=(base*base)%mod;
p>>=;
}
return sum;
} void work1()
{
LL y,z,p;
scanf("%lld%lld%lld",&y,&z,&p);
printf("%lld\n",qpow(y,z,p)%p);
return ;
} void exgcd(int a,int b,LL &d,LL &x,LL &y)
{
if(!b){d=a;x=;y=;return ;}
exgcd(b,a%b,d,y,x);
y-=x*(a/b);
}
LL gcd(LL a,LL b)
{
if(!b) return a;
return gcd(b,a%b);
}
void work2()
{
LL a,b,y,z,x,d,mod;
scanf("%lld%lld%lld",&y,&z,&mod);
a=y;
b=-mod;
d=gcd(a,b);
if(z%d)
{
printf("Orz, I cannot find x!\n");
return ;
}
a/=d;b/=d;z/=d;
exgcd(a,b,d,x,y);
x*=z;x%=b;
while(x<) x+=b;
printf("%lld\n",x);
} map<LL,LL>mp;
void work3()
{
mp.clear();
LL y,z,q,p;
scanf("%lld%lld%lld",&y,&z,&p);
y%=p;
if(!y&&!z)
{
puts("");return ;
}
if(!y)
{
printf("Orz, I cannot find x!\n");
return;
}
LL pos=ceil(sqrt(p));
LL ans;
for(LL i=;i<=pos;i++)
{
if(i==)
{
ans=z%p;
mp[ans]=;
continue;
}
ans=(ans*y)%p;
mp[ans]=i;
}
ans=;
LL t=qpow(y,pos,p);
for(LL i=;i<=pos;i++)
{
ans=(ans*t)%p;
if(mp[ans])
{
LL b=i*pos-mp[ans];
printf("%d\n",(b%p+p)%p);
return ;
}
}
printf("Orz, I cannot find x!\n");
}
int main()
{
scanf("%d%d",&T,&L);
if(L==)
for(int i=;i<=T;i++)
work1();
if(L==)
for(int i=;i<=T;i++)
work2();
if(L==)
for(int i=;i<=T;i++)
work3();
return ;
}

luogu P2485 [SDOI2011]计算器的更多相关文章

  1. BZOJ 2242 / Luogu P2485 [SDOI2011]计算器 (BSGS)

    type 1type\ 1type 1 就直接快速幂 type 2type\ 2type 2 特判+求逆元就行了. type 3type\ 3type 3 BSGS板 CODE #include< ...

  2. 洛谷 P2485 [SDOI2011]计算器 解题报告

    P2485 [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最 ...

  3. P2485 [SDOI2011]计算器

    P2485 [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最 ...

  4. 洛谷P2485 [SDOI2011]计算器(exgcd+BSGS)

    传送门 一题更比三题强 1操作直接裸的快速幂 2操作用exgcd求出最小正整数解 3操作用BSGS硬上 然后没有然后了 //minamoto #include<cstdio> #inclu ...

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

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

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

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

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

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

  8. BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS

    BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS 题意: 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p, ...

  9. [Luogu 2486] SDOI2011 染色

    [Luogu 2486] SDOI2011 染色 树剖水题,线段树维护. 详细题解不写了. 我只想说我写的线段树又变漂亮了qwq #include <algorithm> #include ...

随机推荐

  1. hasOwnProperty()方法与in操作符

    1.hasOwnProperty() 该方法检测属性存在于实例,还是存在于原型,对于存在于实例中的属性则返回true 2.in 使用该操作符时只要通过对象能够访问到的属性都会返回true

  2. Sberbank Russian Housing Market比赛总结

    第一次真正意义上参加kaggle比赛,都是工作之余看看别人的kernel,然后整理整理自己的分析代码. 总体来说,本次比赛对我而言更像一个入门比赛,更多的是走走kaggle比赛的整个流程,看看高手们都 ...

  3. LCD实验学习笔记(七):NAND FLASH

    s3c2440 CPU内置NAND FLASH控制器.相关寄存大器起始地址为0x4e000000. 通过设置NFCONF寄存器,设置NAND FLASH 时序. 通过设置NFCONT寄存器,使能NAN ...

  4. python基础===discover函数介绍

    discover(start_dir,pattern='test*.py',top_level_dir=None) 找到指定目录下所有测试模块,并可递归查到子目录下的测试木块,只有匹配到的文件名才会被 ...

  5. FISCO-BCOS平台共识

    FISCO-BCOS 应用于区块链的多节点并行拜占庭容错共识算法 看了下微众平台的wiki共识知识 学习下 ()内是自己的思考  参考: https://github.com/FISCO-BCOS/W ...

  6. git subtree:无缝管理通用子项目

    移动互联网的爆发以及响应式页面的尴尬症,开发web和mobile项目成为了标配,当然实际情况下,会有更多的项目. 多项目开发对于前端来说是个很大的挑战✦ 重复,重复的前端架构,重复的前端依赖,重复的工 ...

  7. 微信小程序获取输入框(input)内容

    微信小程序---获取输入框(input)内容 wxml <input placeholder="请输入手机号码" maxlength="11" type= ...

  8. canvas写的地铁地图

    更新: 18-9-21:填了个坑,更新了canvas绘制过程. 根据的是百度提供的坐标,canvas的坐标是大的坐标在后面,所以跟实际生活方向相反. 所以canvas里的北方在下方,实际生活中北方在上 ...

  9. ACE_INET_Addr类 API

    ACE_INET_Addr类,在这个ACE_网络框架中,应该是比较重要的辅助类,该类主要封装了C SOCKET 的地址对象,通过外观封装的模式,把struct sockaddr_in封装在内.方便用户 ...

  10. dev....把pivotgridview和chart一起导出

    首先~: 命名空间: using DevExpress.XtraPrinting;using DevExpress.XtraCharts.Native;using DevExpress.XtraPri ...