【bzoj2242】[SDOI2011]计算器
2242: [SDOI2011]计算器
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 3207 Solved: 1258
[Submit][Status][Discuss]
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
/*************
bzoj 2242
by chty
2016.11.9
*************/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
#define FILE "read"
#define MAXN 99991
typedef long long ll;
struct node{ll v,f,num;}hash[MAXN+];
ll a,b,mod;
inline ll read()
{
ll x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
void insert(ll v,ll x)
{
ll temp=v%MAXN;
while(hash[temp].f&&hash[temp].v!=v) {temp++; if(temp>MAXN) temp-=MAXN;}
if(!hash[temp].f) hash[temp].f=,hash[temp].v=v,hash[temp].num=x;
}
ll find(ll v)
{
ll temp=v%MAXN;
while(hash[temp].f&&hash[temp].v!=v) {temp++; if(temp>MAXN) temp-=MAXN;}
if(!hash[temp].f) return -;
else return hash[temp].num;
}
ll gcd(ll a,ll b) {return !b?a:gcd(b,a%b);}
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b) {x=; y=; return a;}
ll g=exgcd(b,a%b,x,y);
ll t=x;x=y;y=t-a/b*y;
return g;
}
void solve1(){ll sum=;for(;b;b>>=,a=a*a%mod)if(b&)sum=sum*a%mod;printf("%d\n",sum);}
void solve2()
{
ll x,y,d=exgcd(a,mod,x,y);
if(b%d) {printf("Orz, I cannot find x!\n");return;}
ll t=mod/d;
while(x<) x+=t;
while(x>=t) x-=t;
printf("%lld\n",x*b%mod);
}
void solve3()
{
if(mod==) {puts(""); return;}
a%=mod;b%=mod;
ll ret();
for(ll i=;i<=;i++) {if(ret==b) {printf("%lld\n",i); return; ret=ret*a%mod;}}
ll temp,ans(),cnt();
while((temp=gcd(a,mod))!=)
{
if(b%temp) {printf("Orz, I cannot find x!\n");return;}
mod/=temp; b/=temp;
ans=ans*(a/temp)%mod;
cnt++;
}
ll m=(ll)sqrt(mod*1.0),t();
for(ll i=;i<m;i++) {insert(t,i);t=t*a%mod;}
for(ll i=;i<m;i++)
{
ll x,y;
exgcd(ans,mod,x,y);
ll val=x*b%mod;
val=(val+mod)%mod;
ll j=find(val);
if(j!=-) {printf("%lld\n",i*m+j+cnt);return;}
ans=ans*t%mod;
}
printf("Orz, I cannot find x!\n");
return;
}
void pre() {for(ll i=;i<=MAXN;i++)hash[i].f=,hash[i].num=hash[i].v=-;}
int main()
{
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
ll T=read(),flag=read();
while(T--)
{
pre();
a=read(); b=read(); mod=read();
switch(flag)
{
case :solve1();break;
case :solve2();break;
case :solve3();break;
}
}
return ;
}
【bzoj2242】[SDOI2011]计算器的更多相关文章
- [bzoj2242][Sdoi2011]计算器_exgcd_BSGS
计算器 bzoj-2242 Sdoi-2011 题目大意:裸题,支持快速幂.扩展gcd.拔山盖世 注释:所有数据保证int,10组数据. 想法:裸题,就是注意一下exgcd别敲错... ... 最后, ...
- BZOJ2242 [SDOI2011]计算器 【BSGS】
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 4741 Solved: 1796 [Submit][Sta ...
- BZOJ2242 [SDOI2011]计算器
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 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.给 ...
- 【数学 BSGS】bzoj2242: [SDOI2011]计算器
数论的板子集合…… Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最 ...
- [bzoj2242][SDOI2011][计算器] (Baby-Step-Giant-Step+快速幂+exgcd)
Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...
- bzoj2242: [SDOI2011]计算器 && BSGS 算法
BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (m ...
- 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)
传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...
- bzoj千题计划246:bzoj2242: [SDOI2011]计算器
http://www.lydsy.com/JudgeOnline/problem.php?id=2242 #include<map> #include<cmath> #incl ...
随机推荐
- 人人都要培养AIQ
在人工智能时代,要培养自己的AIQ,其中的关键还是区分事实.观点和推理,在平时的工作生活中关注AI的发展,了解AI的优缺点,尝试用AI的优势让自己工作和生活的更好. 如果说IQ是用来测量一个人的智商, ...
- 设置Maven的Web工程启动名称
java application的web工程名称就是工程名称:但是maven则不同,他的默认的website名称是在maven的pom文件里面的artifactId节点配置的值:例如: <gro ...
- 通过Authentication Challenge来信任自签名Https证书
在开发阶段我们我们经常使用自签名的证书来部署我们的后台rest api.但是在iOS中调用的时候就会因为证书不被信任而调用api不成功.这时候我们就需要通过实现某些网络回调函数来自定义证书的验证逻辑. ...
- 亚马逊MWS开发套路演示
MWS是商城网络服务的缩写,具体介绍看这里http://docs.developer.amazonservices.com/zh_CN/dev_guide/DG_IfNew.html.MWS就是一组A ...
- DBUtils 增删改查例子
sql CREATE TABLE [dbo].[Person] ( , ) NOT NULL , ) COLLATE Chinese_PRC_CI_AS NULL , [age] [int] NULL ...
- MySQL的Query Cache原理分析
QueryCache(下面简称QC)是根据SQL语句来cache的.一个SQL查询如果以select开头,那么MySQL服务器将尝试对其使用QC.每个Cache都是以SQL文本作为key来存的. 原理 ...
- python 高阶内置函数
1.lambda 匿名函数 lambda 参数: 返回值 函数名统一都叫lambda. 2.sorted() 排序函数 排序函数 sorted(iterable,key,reverse) key:排序 ...
- [Java.Web]Tomcat 常用配置
1. web.xml 文件最下方内容 (X:\apache-tomcat-7.0.77\conf\ 目录下) <welcome-file-list> <welcome-file> ...
- Thread.setDaemon详解
Thread.setDaemon详解 线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护 ...
- if、while中变量的作用域问题
我们知道,函数.类会改变当前变量的作用域.if,while等分支循环结构会继承外部作用域,即外部变量对分支循环结构内部可见. 但是C语言不支持if,while等分支循环结构内部作用域对外可见,而PHP ...