BZOJ 2242 [SDOI2011]计算器 ——EXGCD/快速幂/BSGS
2024-09-08 08:46:42
三合一的题目。
exgcd不解释,快速幂不解释。
BSGS采用了一种不用写EXGCD的方法,写起来感觉好了很多。
比较坑,没给BSGS的样例(LAJI)
#include <map>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i)
#define ll long long map <ll,ll> mp; ll t,k; ll qpow(ll a,ll b,ll p)
{
ll ret=1;
while (b)
{
if (b&1) ret=(ll)ret*a%p;
a=(ll)a*a%p;
b>>=1;
}
return ret;
} void solve1()
{
F(i,1,t)
{
ll a,b,p;
scanf("%lld%lld%lld",&a,&b,&p);
printf("%lld\n",qpow(a,b,p));
}
} void exgcd(ll a,ll b,ll &d,ll &x,ll &y)
{
if (b==0) {x=1;y=0;d=a;return;}
exgcd(b,a%b,d,y,x);
y-=x*(a/b);
} void solve2()
{
F(i,1,t)
{
ll a,b,p,x,y,z,d;
scanf("%lld%lld%lld",&a,&b,&p);b%=p;
exgcd(a,p,d,x,y);
if (b%d)
{
printf("Orz, I cannot find x!\n");
continue;
}
x=x*(b/d);
if (x>=0) x=x%p;
else x=(0-x)/p*p+x;
while (x<0) x+=p;
printf("%lld\n",x);
}
} void solve3()
{
F(i,1,t)
{
ll a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
mp.clear();
if (a%c==0) {printf("Orz, I cannot find x!\n");continue;}
ll p=false;
ll m=ceil(sqrt(c)),ans;
for (ll i=0;i<=m;++i)
{
if (i==0)
{
ans=b%c;mp[ans]=i;continue;
}
ans=((ll)ans*a)%c;
mp[ans]=i;
}
ll tmp=qpow(a,m,c); ans=1;
for (ll i=1;i<=m;++i)
{
ans=((ll)ans*tmp)%c;
if (mp[ans])
{
ll tmp=i*m-mp[ans];
printf("%lld\n",(tmp%c+c)%c);
p=true;
break;
}
}
if (!p) printf("Orz, I cannot find x!\n");
}
} int main()
{
scanf("%lld%lld",&t,&k);
switch(k)
{
case 1: solve1(); break;
case 2: solve2(); break;
case 3: solve3(); break;
}
}
最新文章
- HttpUtil
- JAVA基础中的注意点(二)
- [PHP] - Laravel - Route路由
- 阅读笔记 The Impact of Imbalanced Training Data for Convolutional Neural Networks [DegreeProject2015] 数据分析型
- typedef block
- java dom4j解析xml用到的几个方法
- 算法之合并排序(mergeSort)
- 397. Integer Replacement
- css float父元素高度塌陷
- stm32通用定时器中断问题
- UVA LA 7146 2014上海亚洲赛(贪心)
- Android学习笔记-Button(按钮)
- dede 你所上传的软件类型不在许可列表,请更改系统对扩展名限定的配置
- 企业级分布式存储应用与实战-mogilefs实现
- 【Unity与23种设计模式】观察者模式(Observer)
- cf351B Jeff and Furik (树状数组)
- python模块之logging模块
- XSY contest1586 proB
- Dota 2 中安装包的作用
- BugFree设置邮箱通知(这里以163邮箱为例)
热门文章
- 使用Android-Debug-Database 在浏览器中查看App的数据库
- vs2010调试sql2008存储过程
- hihoCoder #1068 : RMQ-ST算法(模板)
- codevs 1146 ISBN号码
- O2O的十八个细分市场,运营模式如何?
- UVA - 11082 Matrix Decompressing (最大流,技巧)
- 第009课 gcc和arm-linux-gcc和MakeFile
- Node.js连接mysql报加密方式错误解决方案
- AC自动机讲解+[HDU2222]:Keywords Search(AC自动机)
- null 理解