三合一的题目。

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;
}
}

  

BZOJ 2242 [SDOI2011]计算器 ——EXGCD/快速幂/BSGS的更多相关文章

  1. BZOJ 2242 [SDOI2011]计算器(快速幂+Exgcd+BSGS)

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

  2. BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS

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

  3. 【bzoj2242】: [SDOI2011]计算器 数论-快速幂-扩展欧几里得-BSGS

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

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

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...

  5. BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )

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

  6. BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]

    2242: [SDOI2011]计算器 题意:求\(a^b \mod p,\ ax \equiv b \mod p,\ a^x \equiv b \mod p\),p是质数 这种裸题我竟然WA了好多次 ...

  7. bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS

    1:快速幂  2:exgcd  3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...

  8. bzoj 2242: [SDOI2011]计算器【扩展欧几里得+快速幂+BSGS】

    第一问快速幂板子 第二问把式子转化为\( xy\equiv Z(mod P)\rightarrow xy+bP=z \),然后扩展欧几里得 第三问BSGS板子 #include<iostream ...

  9. BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)

    同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...

随机推荐

  1. jmeter动态参数传值配置

    jmeter动态参数传值配置

  2. 宠溺旧习,win10清单-配置与软件

    从win98到win7塑就的旧“习 不是一两天能随了win10的任性 输入法反win X的头疼与苦恼 开机总要输密码的麻烦与滋扰 还有着一些莫名其妙的问题, 在过往与如今的交织间错乱. -序 好吧,其 ...

  3. Python学习日志9月15日

    一周就要过去了,而我跟一周以前没什么区别.回想一下,我这周做了什么事情呢.恍然若失.这周的精力都浪费在很多不必要的事情上了.学过一片古文,讲后羿学射箭,他有一个同学跟他一样聪明,在一起学习.后羿呢,专 ...

  4. Bootstrap select(选择列表)

    当您想让用户从多个选项中进行选择,但是默认情况下只能选择一个选项,则使用选择框 1.使用<select>展示列表选项 2.使用multiple="multiple"允许 ...

  5. 使用一位数组解决 1 1 2 3 5 8 13 数列问题 斐波纳契数列 Fibonacci

    斐波纳契数列 Fibonacci 输出这个数列的前20个数是什么? 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 使用数组实现输出数列的前30 ...

  6. iOS利用UIDocumentInteractionController和Quick Look打开或预览文档

    在App的开发过程中,我们避免不了要打开软件中的文件,例如:Excel文件,Word文件,图片文件等不同格式的文件或者想要通过第三方的App来打开这些文件,那么我们就要用到UIDocumentInte ...

  7. 哪些 Python 库让你相见恨晚?

    知乎用户,A European Swallow. 苇叶.Aran He.jerry等人赞同 补充三个有助于自动化日常工作的: sh:sh 1.08 — sh v1.08 documentation可以 ...

  8. (35)zabbix Event acknowledgment事件确认

    概述 以往服务器出现报警,运维人员处理完事之后,报警自动取消,但是下一次出现同样一个错误,但是换了一个运维人员,他可能需要重新排查问题,直到问题处理完毕. 针对这种情况,zabbix提供了event ...

  9. (转)ios 代码规范

    转自http://blog.csdn.net/pjk1129/article/details/45146955 引子 在看下面之前,大家自我检测一下自己写的代码是否规范,代码风格是否过于迥异阅读困难? ...

  10. mat 和IPIImage之间的转换

    opencv2.3.1 Mat::operator IplImageCreates the IplImage header for the matrix.C++: Mat::operator IplI ...