【bzoj2242】: [SDOI2011]计算器 数论-快速幂-扩展欧几里得-BSGS
1.快速幂
2.扩展欧几里得(费马小定理)
3.BSGS
- /* http://www.cnblogs.com/karl07/ */
- #include <cstdlib>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <map>
- #include <algorithm>
- using namespace std;
- #define LL long long
- int T,K;
- LL a,b,p;
- LL Q_tim(LL x,LL y,LL p){
- LL ans=;
- while (y){
- if (y&) ans=(ans+x)%p;
- x=(x+x)%p;
- y=(y>>);
- }
- return ans;
- }
- LL Q_pow(LL x,LL y,LL p){
- LL ans=;
- while (y){
- if (y&) ans=ans*x%p;
- x=x*x%p;
- y=(y>>);
- }
- return ans;
- }
- void ex_gcd(LL a,LL b,LL &x,LL &y,LL &gcd){
- if (b==) {gcd=a;x=;y=;return;}
- ex_gcd(b,a%b,y,x,gcd);
- y-=x*(a/b);
- }
- void p2(LL a,LL b,LL p){
- LL x,y,gcd,g,ans=p+;
- ex_gcd(a,p,x,y,gcd);
- if (b%gcd!=){ puts("Orz, I cannot find x!"); return;}
- ex_gcd(a/gcd,p/gcd,x,y,g);
- x=x*(b/gcd)%p;
- x=(x+p)%p;
- printf("%lld\n",x);
- }
- void BSGS(LL a,LL b,LL p){
- if ((a== && b!=) || (a== && b!=)) { puts("Orz, I cannot find x!"); return;}
- LL sz=(LL)ceil(sqrt(p)),inv,e=;
- map<LL,LL> x;
- x.clear();
- x[]=;inv=Q_pow(Q_pow(a,sz,p),p-,p);
- for (int i=;i<sz;i++) {e=Q_tim(e,a,p); if (!x.count(e)) x[e]=i;}
- for (int i=;i<sz;i++) {
- if (x.count(b)) {printf("%lld\n",i*sz+x[b]); return;}
- b=Q_tim(b,inv,p);
- }
- puts("Orz, I cannot find x!");
- }
- int main(){
- scanf("%d%d",&T,&K);
- for (int i=;i<=T;i++){
- scanf("%lld%lld%lld",&a,&b,&p);
- if (K==) printf("%lld\n",Q_pow(a%p,b,p));
- if (K==) p2(a%p,b%p,p);
- if (K==) BSGS(a%p,b%p,p);
- }
- return ;
- }
【bzoj2242】: [SDOI2011]计算器 数论-快速幂-扩展欧几里得-BSGS的更多相关文章
- bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS
1:快速幂 2:exgcd 3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...
- 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得
[bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1) 就好 ...
- BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS
BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS 题意: 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p, ...
- BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)
污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...
- [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.给 ...
- 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法
BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...
- 【数论】【扩展欧几里得】Codeforces 710D Two Arithmetic Progressions
题目链接: http://codeforces.com/problemset/problem/710/D 题目大意: 两个等差数列a1x+b1和a2x+b2,求L到R区间内重叠的点有几个. 0 < ...
- 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】
Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...
- BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)
同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...
随机推荐
- Java并发 两个线程交替执行和死锁
今天看到一个题:两个线程交替打印奇数和偶数,即一个线程打印奇数,另一个打印偶数,交替打印从1到100.想了下有多重实现方法. wait和notify方法: public class OddEven { ...
- 一文读懂非关系型数据库(NoSQL)
为了更好的理解非关系型数据库,我又深入的度娘了下 原文地址:https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&co ...
- Rails、Nginx、Passenger、bundle之间的协作关系
引自:http://www.zhihu.com/question/20062163 Bundle是Gem包的依赖管理工具,RubyGem本身有依赖管理为何还要Bundle呢?有时候两个gem虽然都依赖 ...
- dialog插件demo
基本操作 默认窗体 new Dialog('这是一个默认对话框').show(); 非模态对话框 new Dialog('非模态对话框,可以打开多个!',{modal:false}).show(); ...
- Windows_Server_2008远程桌面多用户登陆的配置方法
开启远程桌面后,Windows Vista(或Windows 2008)下默认只支持一个administrator用户登陆,一个登录后另一个就被踢掉了,下面提供允许同一个用户名同时多个用户登录的配置方 ...
- Java中Object.hashCode contract
面试时在这个问题上犯了个错误,只重写了equals方法,而没有覆盖hashCode()方法. 回来重读了Effective Java的Item 9,里面提到Object.hashCode contra ...
- 基于ActiveMQ的Topic的数据同步——初步实现
一.背景介绍 公司自成立以来,一直以做项目为主,算是经累经验吧,自去年以来,我们部门准备将以前的项目做成产品,大概细分了几个小的产品,部们下面又分了几个团队,分别负责产品的研发,而我们属于平台团队,负 ...
- python爬虫(3)--异常处理
1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中,我们需要用try-except语句来包围并捕获相应的异常. ...
- 关于uboot的一些优化
转载于:http://blog.163.com/solylee@126/blog/static/1718231572010101910485331/ 本人的开发环境是u-boot-1.1.6版本,fe ...
- 封装 Toast
一. ToastView.java 1 import android.content.Context; import android.view.LayoutInflater; import andro ...