【bzoj2242】 SDOI2011—计算器
http://www.lydsy.com/JudgeOnline/problem.php?id=2242 (题目链接)
题意
给出y,z,p。求:1.yz mod p;2.xy=z(mod p);3.yx=z(mod p)。
Solution
1.快速幂
2.exgcd
3.BSGS
细节
数学题就是细节多,具体看代码。
代码
- // bzoj2242
- #include<algorithm>
- #include<iostream>
- #include<cstring>
- #include<cstdlib>
- #include<cstdio>
- #include<cmath>
- #include<map>
- #define LL long long
- #define inf 2147483640
- #define Pi acos(-1.0)
- #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
- using namespace std;
- map<int,int> mp;
- LL power(LL a,LL b,LL c) {
- LL res=1;
- while (b) {
- if (b&1) res=res*a%c;
- b>>=1;a=a*a%c;
- }
- return res;
- }
- void exgcd(LL a,LL b,LL &d,LL &x,LL &y) {
- if (b==0) {d=a;x=1;y=0;return;}
- exgcd(b,a%b,d,y,x);
- y-=a/b*x;
- }
- LL BSGS(LL a,LL b,LL p) { //求解a^x=b(mod p),p为素数,无解返回-1.
- if (a%p==0 && b==0) return 1;
- if (a%p==0) return -1;
- mp.clear();mp[1]=0; //注意a^0=1
- int m=ceil(sqrt(p)); //向上取整,避免漏解
- LL inv=power(a,p-m-1,p),e=1; //inv为a^m的逆元,用费马小定理求
- for (int i=1;i<m;i++) { //求e[i]数组
- e=e*a%p;
- if (!mp.count(e)) mp[e]=i;
- }
- for (int i=0;i<m;i++) { //枚举a^(im),a^(im+1),a^(im+2)~~~
- if (mp.count(b)) return mp[b]+i*m; //一定要是mp.count(),因为mp[b]可能为0
- else b=b*inv%p;
- }
- return -1;
- }
- int main() {
- LL T,K,Y,Z,P;scanf("%lld%lld",&T,&K);
- while (T--) {
- scanf("%lld%lld%lld",&Y,&Z,&P);
- if (K==1) printf("%lld\n",power(Y,Z,P));
- if (K==2) {
- LL x,y,d;
- exgcd(Y,P,d,x,y);
- if (Z%d!=0) puts("Orz, I cannot find x!");
- else printf("%lld\n",((Z/d)*x%(P/d)+(P/d))%(P/d));
- }
- if (K==3) {
- LL ans=BSGS(Y,Z,P);
- if (ans==-1) puts("Orz, I cannot find x!");
- else printf("%lld\n",ans);
- }
- }
- return 0;
- }
【bzoj2242】 SDOI2011—计算器的更多相关文章
- [bzoj2242][Sdoi2011]计算器_exgcd_BSGS
计算器 bzoj-2242 Sdoi-2011 题目大意:裸题,支持快速幂.扩展gcd.拔山盖世 注释:所有数据保证int,10组数据. 想法:裸题,就是注意一下exgcd别敲错... ... 最后, ...
- BZOJ2242 [SDOI2011]计算器 【BSGS】
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 4741 Solved: 1796 [Submit][Sta ...
- BZOJ2242 [SDOI2011]计算器
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- BZOJ2242[SDOI2011]计算器——exgcd+BSGS
题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给定y,z,p, ...
- bzoj2242: [SDOI2011]计算器 BSGS+exgcd
你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值:(快速幂) 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数:(exgcd) 3.给 ...
- 【数学 BSGS】bzoj2242: [SDOI2011]计算器
数论的板子集合…… Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最 ...
- [bzoj2242][SDOI2011][计算器] (Baby-Step-Giant-Step+快速幂+exgcd)
Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...
- bzoj2242: [SDOI2011]计算器 && BSGS 算法
BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (m ...
- 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)
传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...
- bzoj千题计划246:bzoj2242: [SDOI2011]计算器
http://www.lydsy.com/JudgeOnline/problem.php?id=2242 #include<map> #include<cmath> #incl ...
随机推荐
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- 【WPF】TextBox样式重写注意事项
1.普通控件重写需要添加一行 <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="C ...
- 杭电1008 Elevator
#include <stdio.h> #include <stdlib.h> int main() { int n; int i,j; int num[101]; while( ...
- Working Set缓存算法(转)
为了加深对缓存算法的理解,特转此篇,又由于本文内容过多,故不做翻译,原文地址Working Set页面置换算法 In the purest form of paging, processes are ...
- hadoop家族之pig入门
昨天成功运行第一个在hadoop集群上面的python版本的wordcount,今天白天继续看网上提供的文档.下午上头给定的回复是把hadoop家族都熟悉一下,那就恭敬不如从命,开始学习pig吧- 这 ...
- 理解Java虚拟机体系结构
1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...
- Mysql之case语句(附带实例)
这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧. 结构:case when… then …end 1.判断的同时改变其值 eg: ...
- android开发------响应用户事件
今天的内容有点简单,不难,就是为按钮添加onClick事件. 新知识点: Intent类的简单使用 startActivity方法 一般事件都由按钮触发,现在我们要实现的是当用户点击按钮的时候,启动 ...
- Java网络编程——概述
一.网络模型 OSI七层模型 应用层 表示层 会话层 传输层: 网络层: 链路层 物理层:比特流 TCP/IP四层模型 应用层 传输层:数据包,TCP/UDP 网络层:数据帧 物理层:比特流 二.网络 ...
- Django- 1- 数据库设置
更改配置文件中的 字段更改为 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', //按照自己的数据库配置配置,现在所配置 ...