题目:https://www.acwing.com/problem/content/226/

题意:有一个计算器能完成三种功能

1、给定Y,Z,P,计算YZModPYZModP 的值;

2、给定Y,Z,P,计算满足xY≡Z(modP)xY≡Z(modP)的最小非负整数;

3、给定Y,Z,P,计算满足Yx≡Z(modP)Yx≡Z(modP)的最小非负整数。

思路:第一种很明显就是个快速幂取模,第二种,因为p是个质数,所以我们可以用快速幂取逆元来计算,第三种就是BSGS的板子

#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
#define ll long long
//快速幂求a^b
LL power(LL a,LL b,LL n)
{
LL s=;
while(b)
{
if(b&)
s=(s*a)%n;
a=(a*a)%n;
b=b>>;
}
return s;
}
ll work2(ll y,ll z,ll p)//xy=z mod p
{
if(y%p==&&z!=) return -;
return z*power(y,p-,p)%p;
}
ll bsgs(ll a,ll b,ll p){
map<ll,ll> hash;
hash.clear();
b%=p;
ll t=(ll)sqrt(p)+;
for(int j=;j<t;j++){
ll val = (ll)b*power(a,j,p)%p;
hash[val]=j;
}
a=power(a,t,p);
if(a==) return b==?:-;
for(int i=;i<=t;i++){
ll val = power(a,i,p);
ll j=hash.find(val)==hash.end()?-:hash[val];
if(j>=&&i*t-j>=) return i*t-j;
}
return -;
}
int main()
{
LL a,b,t,n;
ll op;
scanf("%lld%lld",&t,&op);
for(int i=;i<t;i++){
scanf("%lld%lld%lld",&a,&b,&n);
if(op==){
printf("%lld\n",power(a,b,n));
}
else if(op==){
ll w=work2(a,b,n);
if(w==-) printf("Orz, I cannot find x!\n");
else printf("%lld\n",w);
}
else if(op==){
ll w=bsgs(a,b,n);
if(w==-) printf("Orz, I cannot find x!\n");
else printf("%lld\n",w);
}
}
return ;
}

AcWing 224. 计算器 (BSGS算法)打卡的更多相关文章

  1. bzoj2242: [SDOI2011]计算器 && BSGS 算法

    BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (m ...

  2. bzoj 2242: [SDOI2011]计算器 & BSGS算法笔记

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

  3. luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法

    BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...

  4. 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法

    BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...

  5. BSGS算法

    BSGS算法 我是看着\(ppl\)的博客学的,您可以先访问\(ppl\)的博客 Part1 BSGS算法 求解关于\(x\)的方程 \[y^x=z(mod\ p)\] 其中\((y,p)=1\) 做 ...

  6. BSGS算法及扩展

    BSGS算法 \(Baby Step Giant Step\)算法,即大步小步算法,缩写为\(BSGS\) 拔山盖世算法 它是用来解决这样一类问题 \(y^x = z (mod\ p)\),给定\(y ...

  7. BSGS算法及其扩展

    bsgs算法: 我们在逆元里曾经讲到过如何用殴几里得求一个同余方程的整数解.而\(bsgs\)就是用来求一个指数同余方程的最小整数解的:也就是对于\(a^x\equiv b \mod p\) 我们可以 ...

  8. BSGS算法总结

    BSGS算法总结 \(BSGS\)算法(Baby Step Giant Step),即大步小步算法,用于解决这样一个问题: 求\(y^x\equiv z\ (mod\ p)\)的最小正整数解. 前提条 ...

  9. 【BZOJ2242】[SDOI2011]计算器 BSGS

    [BZOJ2242][SDOI2011]计算器 Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ ...

随机推荐

  1. paper 168: 2018-FATTEN 论文解析-feature space transfer for data augmentation

    paper download:https://arxiv.org/abs/1801.04356 本文的核心就是使用GAN网络生成新的数据. 这个总体框图,常规结构,具体是通过在appearance和p ...

  2. [CSP-S模拟测试]:春思(数学)

    蝶恋花·春景花褪残红青杏小.燕子飞时,绿水人家绕.枝上柳绵吹又少.天涯何处无芳草!墙里秋千墙外道.墙外行人,墙里佳人笑.笑渐不闻声渐悄.多情却被无情恼.(本词是伤春之作,写春景清新秀丽.同时,景中又有 ...

  3. 转载:解决npm安装时出现run `npm audit fix` to fix them, or `npm audit` for details

    转载自:https://blog.csdn.net/qq_39165556/article/details/89333028 1.第一种解决办法 npm audit fix npm audit fix ...

  4. linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  5. apr not found,APR-util not found,pcre,

    1.下载所需软件包(此下载链接经由作者验证可使用): wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz wget http://arch ...

  6. WinSCP

    Safe, open-source file transfers WinSCP is an open-source, free SFTP, SCP, FTPS and FTP client for W ...

  7. js对象传到后台ACTION使用

    需的包 <script type="text/javascript" src="s"></script>gson-1.2.3.jar谷歌 ...

  8. Bootstrap 学习笔记3 路径分页标签和徽章组件

  9. springboot 尚桂谷学习总结02

    ------向导快速创建Springboot 项目------ 1.使用spring initializer 快速创建一个springboot 项目 选择后 最后点击finsh 向导会联网创建 spr ...

  10. Mutable and Immutable Variables in Python

    本文解决python中比较令人困惑的一个小问题:传递到函数中的参数若在函数中进行了重新赋值,对于函数外的原变量有何影响.看一个小栗子: def fun(a): a=2 return a=1 fun(a ...