bzoj 2242 [SDOI2011]计算器(数论知识)
Description
Input
输入包含多组数据。
Output
Sample Input
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
2
1
2
【样例输出2】
2
1
0
【思路】
快速幂,拓展欧几里得,BSGS
第一问快速幂求得。
第二问求axΞ b(mod n),转化为ax=ny+b,转化为ax+ny=b,利用拓展欧几里得算法求出ax+ny=gcd(a,n),如果b不是gcd的倍数则无解否则为x/gcd*b。
第三问求ax Ξb(mod n),BSGS算法。我们需要验证0..n-1内的数。分块,设每块大小为m,求出0..m-1内的ai % n保存为ei,对于m..2m-1内的数,我们只需要验证是否存在有am *ei=b(mod n),即判断是否存在ei=a-m *b (mod n),这样用一个hash表存一下ei然后求一下在模n下am的逆元就可以了。
时间复杂度为O((m+n/m)logm),当m取n½的时候复杂度较优为O(n½logn)
【代码】
#include<map>
#include<cmath>
#include<cstdio>
using namespace std; typedef long long LL;
LL a,b,c,T,k; LL pow(LL x,LL p,LL MOD) {
LL tmp=x,ans=;
while(p) {
if(p&) ans=(ans*tmp)%MOD;
tmp=(tmp*tmp)%MOD;
p>>=;
}
return ans;
}
void gcd(LL a,LL b,LL& d,LL& x,LL& y) {
if(!b) d=a,x=,y=;
else gcd(b,a%b,d,y,x),y-=x*(a/b);
}
LL inv(LL a,LL n) {
LL d,x,y;
gcd(a,n,d,x,y);
return d==? (x+n)%n:-;
}
LL log_mod(LL a,LL b,LL n) {
LL m,v,e=,i;
m=sqrt(n+0.5);
v=inv(pow(a,m,n),n);
map<LL,LL> mp;
mp[]=;
for(LL i=;i<m;i++) {
e=(e*a)%n;
if(!mp.count(e)) mp[e]=i;
}
for(LL i=;i<m;i++) {
if(mp.count(b)) return i*m+mp[b];
b=(b*v)%n;
}
return -;
} int main() {
scanf("%lld%lld",&T,&k);
while(T--) {
scanf("%lld%lld%lld",&a,&b,&c);
if(k==) {
printf("%lld\n",pow(a,b,c));
} else
if(k==) {
LL d,x,y;
gcd(a,c,d,x,y);
if(b%d) puts("Orz, I cannot find x!");
else {
LL ans=((x*b/d)%c+c)%c;
printf("%lld\n",ans);
}
} else {
LL ans=log_mod(a,b,c);
if(ans==-) puts("Orz, I cannot find x!");
else printf("%lld\n",ans);
}
}
return ;
}
bzoj 2242 [SDOI2011]计算器(数论知识)的更多相关文章
- bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...
- BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )
没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...
- BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]
2242: [SDOI2011]计算器 题意:求\(a^b \mod p,\ ax \equiv b \mod p,\ a^x \equiv b \mod p\),p是质数 这种裸题我竟然WA了好多次 ...
- [原博客] BZOJ 2242 [SDOI2011] 计算器
题目链接 noip级数论模版题了吧.让求三个东西: 给定y,z,p,计算`Y^Z Mod P` 的值. 给定y,z,p,计算满足`xy≡ Z ( mod P )`的最小非负整数. 给定y,z,p,计算 ...
- BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)
同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-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 ...
- bzoj 2242 [SDOI2011]计算器——BSGS模板
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一道BSGS! 咳咳,我到底改了些什么?…… 感觉和自己的第一版写的差不多……可能是 ...
- BZOJ 2242 [SDOI2011]计算器 BSGS+高速幂+EXGCD
题意:id=2242">链接 方法: BSGS+高速幂+EXGCD 解析: BSGS- 题解同上.. 代码: #include <cmath> #include <c ...
- bzoj 2242: [SDOI2011]计算器
#include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...
随机推荐
- django1.6之mysql配置
# Database# https://docs.djangoproject.com/en/1.6/ref/settings/#databases setting 配置修改 INSTALLED_APP ...
- 组态王6.55WEB全新发布步骤
转载请... 算了 估计没有人转..自己留着看 目的: 本教程通过组态王6.55实现一个WEB服务器和一个WEB画面的客户端,总共两个工程.服务器工程名为 Server , 客户点为 Client.S ...
- 谈谈GUI的配色和字体选择
对于工控领域的显示屏,显示效果很难和电脑屏幕相比.电脑上操作系统或者各种软件的配色方案,在应用到工业控制屏上就会出现“完全不是所想要”的结果,所以工控领域GUI的色彩.字体的选择还是有特别的讲究. 配 ...
- ios字符串操作
string的操作应用 NSRange range = [self.general rangeOfString:@"."]; NSString *str = [self.gener ...
- mvvm windows app DataBinding
前台html 绑定(view):<div id="aa" data-win-bind="innerText:UserData.word" style=&q ...
- VC项目配置基础以及快捷键(收藏)
来自http://blog.csdn.net/phunxm/article/details/5082488 一.IDE基础配置 1.字体 VC6中“Tools→Options→Format→Font” ...
- asp.net 文件复制或删除用相对路径,File.Copy中用相对路径,巧用相对路径复制文件
再复制文件 File.Copy(Server.MapPath("被复制的文件相对路径"), Server.MapPath("目的位置相对路径"), true); ...
- Hadoop新版本中map任务待处理split大小的计算方法
1. split大小的计算公式 minSize=max{minSplitSize,mapred.min.split.size} (minSplitSize大小默认为1B) maxSize=mapred ...
- *[codility]MaxCounters
http://codility.com/demo/take-sample-test/maxcounters 简单题.注意要记录两个max,一个是最大值,一个是已经生效的最大值. // you can ...
- 未来 USB Type-C 将可靠软体判断线材是否符合规定
USB Type-C 插头允许通过的电流和功率比过去常见的 USB 规范要大得多,因此从市面上「随便买一条」USB Type-C 的充电线的危险也同样大得多,毕竟不是所有的线材能承受的电流都一样,万一 ...