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

时间:2023-02-01 22:13:51

2242: [SDOI2011]计算器

Time Limit: 10 Sec  Memory Limit: 512 MB
[Submit][Status][Discuss]

Description

你被要求设计一个计算器完成以下三项任务:
1、给定y,z,p,计算Y^Z Mod P 的值;
2、给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数;
3、给定y,z,p,计算满足Y^x ≡ Z ( mod P)的最小非负整数。

Input

输入包含多组数据。

第一行包含两个正整数T,K分别表示数据组数和询问类型(对于一个测试点内的所有数据,询问类型相同)。
以下行每行包含三个正整数y,z,p,描述一个询问。

Output

对于每个询问,输出一行答案。对于询问类型2和3,如果不存在满足条件的,则输出“Orz, I cannot find x!”,注意逗号与“I”之间有一个空格。

Sample Input

【样例输入1】
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

【样例输出1】
2
1
2
【样例输出2】
2
1
0
思路:1:裸快速幂;
   2:y*x+p*k=z,解方程;
   3:BSGS
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pi (4*atan(1.0))
#define eps 1e-14
const int N=2e5+,M=4e6+,inf=1e9+,mod=1e9+;
const ll INF=1e18+;
#define MOD 100000
int hs[MOD],head[MOD],nex[MOD],id[MOD];
int top;
void Insert(int x,int y)
{
int k = x%MOD;
hs[top] = x, id[top] = y, nex[top] = head[k], head[k] = top++;
}
int Find(int x)
{
int k = x%MOD;
for(int i = head[k]; i; i = nex[i]) if(hs[i] == x) return id[i];
return -;
}
int BSGS(int a,int b,int n)
{
a%=n;
if(!a&&!b){return ;}
if(!a){return -;}
memset(head,,sizeof(head));
top = ;
if(b == )return ;
int m = sqrt(n*1.0), j;
long long x = , p = ;
for(int i = ; i < m; ++i, p = p*a%n)Insert(p*b%n,i);
for(long long i = m; ; i += m)
{
if( (j = Find(x = x*p%n)) != - )return i-j;
if(i > n)break;
}
return -;
}
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;
}
int quick(ll x,int y,int mod)
{
ll ans=;
while(y)
{
if(y&)ans=ans*x,ans%=mod;
x*=x;
x%=mod;
y>>=;
}
return ans;
}
int main()
{
int T,k;
scanf("%d%d",&T,&k);
while(T--)
{
int a,b,n;
scanf("%d%d%d",&a,&b,&n);
if(k==)
printf("%d\n",quick(1LL*a,b,n));
else if(k==)
{
int x,y;
int gcd=exgcd(a,n,x,y);
x=(x%n+n)%n;
if(b%gcd!=)
printf("Orz, I cannot find x!\n");
else
printf("%lld\n",(1LL*x*(b/gcd))%n);
}
else
{
int ans=BSGS(a,b,n);
if(ans==-)
printf("Orz, I cannot find x!\n");
else
printf("%d\n",ans%mod);
}
}
return ;
}

bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德的更多相关文章

  1. BZOJ 2242 &lbrack;SDOI2011&rsqb;计算器 BSGS&plus;高速幂&plus;EXGCD

    题意:id=2242">链接 方法: BSGS+高速幂+EXGCD 解析: BSGS- 题解同上.. 代码: #include <cmath> #include <c ...

  2. BZOJ 2242 &lbrack;SDOI2011&rsqb;计算器(快速幂&plus;Exgcd&plus;BSGS)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2242 [题目大意] 给出T和K 对于K=1,计算 Y^Z Mod P 的值 对于K=2 ...

  3. BZOJ 2242 &lbrack;SDOI2011&rsqb;计算器 ——EXGCD&sol;快速幂&sol;BSGS

    三合一的题目. exgcd不解释,快速幂不解释. BSGS采用了一种不用写EXGCD的方法,写起来感觉好了很多. 比较坑,没给BSGS的样例(LAJI) #include <map> #i ...

  4. BZOJ&lowbar;2242&lowbar;&lbrack;SDOI2011&rsqb;计算器&lowbar;快速幂&plus;扩展GCD&plus;BSGS

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

  5. 【bzoj2242】&colon; &lbrack;SDOI2011&rsqb;计算器 数论-快速幂-扩展欧几里得-BSGS

    [bzoj2242]: [SDOI2011]计算器 1.快速幂 2.扩展欧几里得(费马小定理) 3.BSGS /* http://www.cnblogs.com/karl07/ */ #include ...

  6. bzoj 2242 &lbrack;SDOI2011&rsqb;计算器——BSGS模板

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一道BSGS! 咳咳,我到底改了些什么?…… 感觉和自己的第一版写的差不多……可能是 ...

  7. BZOJ 2242 &lbrack;SDOI2011&rsqb;计算器 &vert; BSGS

    insert的时候忘了取模了-- #include <cstdio> #include <cmath> #include <cstring> #include &l ...

  8. bzoj 2242&colon; &lbrack;SDOI2011&rsqb;计算器 &amp&semi; BSGS算法笔记

    这题的主要难点在于第三问该如何解决 于是就要知道BSGS是怎样的一种方法了 首先BSGS是meet in the middle的一种(戳下面看) http://m.blog.csdn.net/blog ...

  9. BZOJ 2242&colon; &lbrack;SDOI2011&rsqb;计算器&lpar; 快速幂 &plus; 扩展欧几里德 &plus; BSGS &rpar;

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

随机推荐

  1. hybird之web动态换肤实现

    前言 最近在重构个hybird(原生的壳包着Web页面)的UI框架,进行到了做换肤功能的阶段,所以这里是我思考的解决的方法. 预想 目前实现换肤的功能无非就两种做法. 1.写几个皮肤文件,然后切换使用 ...

  2. WCF tcpTrace&period;exe配置

    Web.config <?xml version="1.0" encoding="utf-8"?> <configuration> &l ...

  3. Clang Language Extensions

    Xcode 本文是自<Clang Language Extensions> 中选取部分与 Objective-C 相关的内容翻译,由于作者水平有限,如存在理解错误或翻译不到位的地方,还请指 ...

  4. jquery val&lpar;&rpar; and text&lpar;&rpar;&period;

    .val() works on input elements (or any element with a value attribute?) and .text() will not work on ...

  5. APP IM 之 XMPP和Jabber及选择方案

    1. 概述 IM ,InstantMessaging,即时通信. 现在,市面上有一批提供即时通信功能的公司.如:全时.云之讯(IM无语音和视频).容联云通讯(支持点对点音视频,按照消息的存储空间收费) ...

  6. es6&plus;require混合开发,兼容es6 module,import&comma;export之 加载css及公用date-main

    大家好!上篇文章已经介绍了搭建文件夹,以及加载js文件.现在讲一下加载css ,以及对baseUrl的理解 1.对项目结构的认知 一个项目的结构是根据项目的架构来决定的,当然也可以做到更智能,但是意义 ...

  7. JDK 7中的文件操作的新特性

    文件系统综述 一个文件系统在某种媒介(通常是一个或多个硬盘)上存储和组织文件.如今的大多数文件系统都是以树状结构来存储文件.在树的顶端是一个或多个根节点,在根节点一下,是文件和目录(在Windows系 ...

  8. python生成个性二维码学习笔记

    在linux环境下进行编码 1.先进家目录,自行创建Code文件夹 cd Code 2.下载MyQR库 sudo pip3 install MyQR 3.下载所需资源文件并解压 Code/ $ wge ...

  9. sql server 用户&&num;39&semi;sa&&num;39&semi;登录失败(错误18456)

    转载于:http://thenear.blog.51cto.com/4686262/865544 用户'sa'登录失败(错误18456)解决方案图解     当我们在使用sql server 的时候可 ...

  10. mac 苹果鼠标 magic mouse2 当触摸代替点击当触摸板教程

    本文解决 mac 苹果鼠标 magic mouse2 触摸代替点击,鼠标当触摸板教程 买了magic mouse2之后,发现官方不推荐使用触摸代替点击,我感觉很不爽,这不就是一个触摸板嘛,于是各种搜软 ...