P2485-[SDOI2011]计算器【BSGS,exgcd,快速幂】

正题

题目链接:https://www.luogu.com.cn/problem/P2485


题目大意

给出a,b,pa,b,pa,b,p要求一下一种

  1. ab%pa^b\% pab%p的值
  2. ax≡b(modp)ax\equiv b(\mod p)axb(modp)的最小非负整数解
  3. ax≡b(modp)a^x\equiv b(\mod p)axb(modp)的最小非负整数解

解题思路

一道缝合题

第一个直接套快速幂就好了,时间复杂度O(log⁡n)O(\log n)O(logn)

第二个是exgcdexgcdexgcd,考虑如何求ax+by=cax+by=cax+by=c

根据裴蜀定理我们对于方程ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)一定有解,考虑求出这组解。

ax+by=gcd(a,b)=gcd(b,a%b)=gcd(b,a−b⌊ab⌋)ax+by=gcd(a,b)=gcd(b,a\% b)=gcd(b,a-b\lfloor\frac{a}{b}\rfloor)ax+by=gcd(a,b)=gcd(b,a%b)=gcd(b,abba)
ax+by=bx′+(a−b⌊ab⌋)y′ax+by=bx'+(a-b\lfloor\frac{a}{b}\rfloor)y'ax+by=bx+(abba)y
ax+by=ay′+b(x′−⌊ab⌋y′)ax+by=ay'+b(x'-\lfloor\frac{a}{b}\rfloor y')ax+by=ay+b(xbay)
故有x=y′,y=x′−⌊ab⌋y′x=y',y=x'-\lfloor\frac{a}{b}\rfloor y'x=y,y=xbay
gcdgcdgcd的时候顺便求解就好了。

那得到这组x0,y0x_0,y_0x0,y0以后,如果cccgcd(a,b)gcd(a,b)gcd(a,b)的倍数那么才有解,而这个方程的通解就是{x=x0∗cd+k∗d∗by=y0∗cd−k∗d∗a\left \{ \begin{matrix}x=x_0*\frac{c}{d}+k*d*b\\y=y_0*\frac{c}{d}-k*d*a\end{matrix}\right.{x=x0dc+kdby=y0dckda
然后拿最小的那组就好了,时间复杂度O(log⁡n)O(\log n)O(logn)

第三个是BSGSBSGSBSGS

定义t=pt=\sqrt pt=p那么axa^xax就可以表示为ai∗t−ja^{i*t-j}aitj
然后ai∗t−j≡b(modp)a^{i*t-j}\equiv b(\mod p)aitjb(modp)
ai∗t≡b∗ajmodp)a^{i*t}\equiv b*a^j\mod p)aitbajmodp)

因为b∗ajb*a^jbaj最多只有ttt种,我们用mapmapmap存下来

然后枚举ai∗ta^{i*t}ait的值与mapmapmap中的对应即可。因为有mapmapmap所以时间复杂度为O(nlog⁡n)O(\sqrt n\log n)O(nlogn),用hashhashhash理论可以优化到O(n)O(\sqrt n)O(n)

需要注意的是at%p=0a^t\%p=0at%p=0时,当且仅当b=1b=1b=1时有解为000


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#define ll long long
using namespace std;
ll T,K,a,b,p;
map<ll,ll> mp;
void work1(ll a,ll b,ll p){ll ans=1;while(b){if(b&1)ans=ans*a%p;a=a*a%p;b>>=1;}printf("%lld\n",ans);return;
}
ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return a;}ll d=exgcd(b,a%b,x,y);ll z=x;x=y;y=z-a/b*y;return d;
}
void work2(ll a,ll b,ll p){ll x,y;ll d=exgcd(a,p,x,y);if(b%d){printf("Orz, I cannot find x!\n");return;}x*=b/d;y*=b/d;printf("%lld\n",(x%(d*p)+d*p)%(d*p));
}
ll power(ll x,ll b,ll p){ll ans=1;while(b){if(b&1)ans=ans*x%p;x=x*x%p;b>>=1;}return ans;
}
void work3(ll a,ll b,ll p){mp.clear();ll t=(int)sqrt(p)+1;for(ll i=0;i<t;i++)mp[b]=i,b=b*a%p;a=power(a,t,p);if(a==0&&b==1){printf("1\n");return;}else if(a==0) {printf("Orz, I cannot find x!\n");return;}ll tmp=1,ans=1e18;for(ll i=0;i<=t;i++){ll j=(mp.find(tmp)!=mp.end())?mp[tmp]:-1;if(j>=0&&i*t-j>=0)ans=min(ans,i*t-j);tmp=tmp*a%p;}if(ans==1e18)printf("Orz, I cannot find x!\n");else printf("%lld\n",ans);
}
int main()
{scanf("%lld%lld",&T,&K);while(T--){scanf("%lld%lld%lld",&a,&b,&p);if(K==1)work1(a%p,b,p);if(K==2)work2(a%p,b%p,p);if(K==3)work3(a%p,b%p,p);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幸运数字Ⅱ

牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 定义一个数字为幸运数字当且仅当它的所有数位都是4或者7。 比如说&#xff0c;47、744、4都是幸运数字而5、17、467都…

【背包】SMRTFUN

SMRTFUN 题目大意&#xff1a; 有n件物品&#xff0c;每件物品有各自的a值和b值&#xff0c;现在让你选一些物品&#xff0c;在a、b都不是负数的情况下&#xff0c;使a、b值之和最大 输入样例 5 -5 7 8 -6 6 -3 2 1 -8 -5输出样例 8样例说明 选择第1&#xff0c;3和4号牛…

Visual Studio 2017 15.8 正式发布,测试速度提高 82%

Visual Studio 2017 15.8 版本已正式发布&#xff1a;发行说明&#xff1a;https://docs.microsoft.com/zh-cn/visualstudio/releasenotes/vs2017-relnotes#15.8下载地址&#xff1a;https://visualstudio.microsoft.com/downloads/安装现可选择在开始安装之前下载所有安装文件…

Codeforces 1176F

Codeforces 1176F 题目 题意&#xff1a;T组物品&#xff0c;按顺序选一个一个选&#xff0c;物品首先要满足组间的相对顺序&#xff0c;每个物品有价值和体积&#xff0c;每组选择的体积不能超过3&#xff0c;组内的选择物品的顺序可以调整&#xff0c;在总的物品的顺序中&…

jzoj5702-[gdoi2018day2]滑稽子图【树形dp,二项式定理】

正题 题目大意 nnn个点的一棵树&#xff0c;定义f(S)f(S)f(S)表示点集SSS的生成子图中的边数量。 求∑S∈Vf(S)k\sum_{S\in V}f(S)^kS∈V∑​f(S)k 解题思路 因为kkk很小&#xff0c;所以可以考虑一下二项式拆解&#xff0c;我们需要快速的计算出(ab)k(ab)^k(ab)k&#xff0c…

【每日一题】4月9日题目精讲 Running Median

文章目录题目&#xff1a;题意&#xff1a;题解一&#xff1a;题解二&#xff1a;题目&#xff1a; –>链接<— 时间限制&#xff1a;C/C 5秒&#xff0c;其他语言10秒 空间限制&#xff1a;C/C 65536K&#xff0c;其他语言131072K 64bit IO Format:%lld 题目描述 For t…

【结论】区间和的和

区间和的和 题目大意&#xff1a; 给出一个数组&#xff0c;求出所有区间和的总和 输入样例&#xff1a; 3 1 2 3输出样例&#xff1a; 20数据范围&#xff1a; 对于30%的数据&#xff1a;1⩽n⩽1001\leqslant n\leqslant 1001⩽n⩽100 对于50%的数据&#xff1a;1⩽n⩽1…

.NET Core 2.1中的HttpClientFactory最佳实践

ASP.NET Core 2.1中出现一个新的HttpClientFactory功能&#xff0c;它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到的一些常见问题。介绍在.NETCore平台的2.1新增了HttpClientFactory&#xff0c;虽然HttpClient这个类实现了disposable&#…

树学

文章目录题目描述题解1&#xff1a;代码:题解2&#xff1a;代码&#xff1a;传送时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format:> %lld 题目描述 牛妹有一张连通图&#xff0c;由n个点…

jzoj5701-[gdoi2018day2]谈笑风生【莫比乌斯反演,二分,最短路】

正题 题目大意 nnn个点&#xff0c;每个点有一个wiw_iwi​&#xff0c;mmm条边&#xff0c;对于一条边(x,y)(x,y)(x,y)&#xff0c;边权为∑i1wx∑j1wy[gcd(i,j)1](ij)\sum_{i1}^{w_x}\sum_{j1}^{w_y}[gcd(i,j)1](ij)i1∑wx​​j1∑wy​​[gcd(i,j)1](ij) 选择一个最小的PPP使得…

csp-2019 复赛游记

文章目录Day0Day\ 0Day 0Day1Day\ 1Day 1Day2Day\ 2Day 2总结:csp−J:csp-J:csp−J:csp−s:csp-s:csp−s:遥远的梦想&#xff1a;Day0Day\ 0Day 0 早上&#xff0c;在运动会上乱搞一波&#xff0c;然后在10点左右到了机房&#xff0c;然后发现巨佬几枚&#xff0c;远看似在认证…

Rainbond v3.7.0:实现企业级PaaS的稳定性

Rainbond v3.7.0&#xff1a;实现企业级PaaS的稳定性Rainbond在v3.7.0版本中释出了大量平台稳定性更新&#xff0c;并在应用管理功能、安全性和系统安装三方面进行了部分优化。作为IT基础系统平台&#xff0c;Rainbond从低耦合的架构设计、高可用的部署方式、自恢复与容错的设计…

简单多边形三角化(暴力)

简单多边形三角化(暴力) 说在前面 网上流传着各种神奇的多边形三角剖分算法&#xff0c;但是讲道理&#xff0c;实现难度太高了。。。也没有搜到其他人的实现。这里写个最暴力的做法。。随机数据验证没问题&#xff0c;欢迎 hack 实现 一个简单多边形的耳朵定义为&#xff1a;如…

牛客网【每日一题】4月13号 Accumulation Degree

文章目录题目描述样例分析&#xff1a;题意&#xff1a;题解&#xff1a;代码&#xff1a;本题目传送题目树学是这个题的简易版&#xff0c;也涉及换根问题&#xff0c;可以先看看这个 树学 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768…

【二分】Distinct

Distinct 题目大意&#xff1a; 有n个军队&#xff08;有自己在x轴上的坐标&#xff09;&#xff0c;每个军队有一定的人&#xff0c;要一个坐标只有一个人&#xff0c;移动路程最大的士兵最少移动多长 原题&#xff1a; 题目描述 Daniel 正在玩一个战棋游戏。 现在 Danie…

P2839-[国家集训队]middle【主席树,二分】

正题 题目链接:https://www.luogu.com.cn/problem/P2839 题目大意 nnn个数字&#xff0c;mmm次询问给出(a,b,c,d)(a,b,c,d)(a,b,c,d)表示左端点在[a,b][a,b][a,b]中&#xff0c;右端点在[c,d][c,d][c,d]的子区间中中位数最大的值。 解题思路 显然我们需要二分一下答案midmidm…

微软把UWP定位成业务线应用程序开发平台

微软把UWP定位成传统业务线&#xff08;LOB&#xff09;应用程序开发平台&#xff0c;以使用Windows Template Studio实现快速应用程序开发为重点。但是&#xff0c;为了把LOB开发人员吸引到UWP平台&#xff0c;他们在做的事情不止这些。最初发布时&#xff0c;通用Windows平台…

牛客网【每日一题】 合集

文章目录2020年3月25日 NC50439 tokitsukaze and Soldier 牛客练习赛50-C2020年3月26日 NC13230 合并回文子串 美团2017年CodeM大赛-初赛A轮2020年3月27日 NC15553 数学考试 2018年长沙理工大学程序设计竞赛2020年3月30日 NC50528 滑动窗口 《信息学奥赛一本通》Part5.52020年3…

NBA总冠军

NBA总冠军NBA总冠军NBA总冠军 题目描述 又要考试了&#xff0c;LJW决定放松一下&#xff0c;就打开电视&#xff0c;看见篮球赛&#xff0c;他立即想到了每年的NBA总冠军队伍。由于复习紧张&#xff0c;他只记起了一部分&#xff0c;记忆的内容是正确的&#xff0c;可能不是按…

P6773-[NOI2020]命运【线段树合并,树形dp】

正题 题目链接:https://www.luogu.com.cn/problem/P6773 题目大意 nnn个点的一棵树&#xff0c;边权可以是000或111。mmm个条件(x,y)(x,y)(x,y)表示要求x,yx,yx,y之间要有边权值为111&#xff08;保证xxx是yyy的祖先&#xff09;&#xff0c;求方案数。 解题思路 考虑容斥&am…