bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS
1:快速幂 2:exgcd 3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了......
(map就是慢).....
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<map>
#define LL long long
using namespace std;
map<long long,int> pp;
map<long long,bool> bo;
LL a,b,c;
int T,opt;
LL qp(LL a,LL b){
LL ans=1;
while(b){
if(b&1)ans=(ans*a)%c;
a=(a*a)%c;b>>=1;
}return ans;
}
LL gcd(LL x,LL y){return y==0?x:gcd(y,x%y);}
LL exgcd(LL o,LL p,LL &x,LL &y){
if(p==0){x=1;y=0;return o;}
LL gcd=exgcd(p,o%p,x,y);
LL t=x; x=y;
y=t-(o/p)*x;
return gcd;
}
LL exbsgs(LL a,LL b,LL c){
pp.clear();bo.clear();
LL g,d=1,m,now=1;int num=0;
while((g=gcd(a,c))>1){
if(b%g!=0)return -1;
b/=g;c/=g;num++;
d=(d*(a/g))%c;
}
//printf("num==%d\n",num);
m=ceil(sqrt(c));
for(int i=0;i<m;i++){
if(!bo[now]){bo[now]=1;pp[now]=i;}
now=(now*a)%c;
}
for(int i=0;i<=m;i++){
LL x,y,e=exgcd(d,c,x,y);
x=(x*b%c+c)%c;
if(bo[x]) return pp[x]+i*m+num;
d=(d*now)%c;
}
return -1;
}
int main(){
scanf("%d%d",&T,&opt);
if(opt==1){
while(T--){
scanf("%lld%lld%lld",&a,&b,&c);
printf("%lld\n",qp(a,b));
}
}
if(opt==2){
while(T--){
scanf("%lld%lld%lld",&a,&b,&c);
LL x,y;
LL d=exgcd(a,c,x,y);
if(b%d!=0){printf("Orz, I cannot find x!\n");continue;}
x*=b/d;
LL cd=c/d;
x=(x%cd+cd)%cd;
printf("%lld\n",x);
}
}
if(opt==3){
while(T--){
scanf("%lld%lld%lld",&a,&b,&c);
LL ans=exbsgs(a,b,c);
if(ans==-1)printf("Orz, I cannot find x!\n");
else printf("%lld\n",ans);
}
}
return 0;
}
bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS的更多相关文章
- BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )
没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...
- 【bzoj2242】: [SDOI2011]计算器 数论-快速幂-扩展欧几里得-BSGS
[bzoj2242]: [SDOI2011]计算器 1.快速幂 2.扩展欧几里得(费马小定理) 3.BSGS /* http://www.cnblogs.com/karl07/ */ #include ...
- 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 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)
污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...
- 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法
BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...
- 【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]计算器【扩展欧几里得+快速幂+BSGS】
第一问快速幂板子 第二问把式子转化为\( xy\equiv Z(mod P)\rightarrow xy+bP=z \),然后扩展欧几里得 第三问BSGS板子 #include<iostream ...
- bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...
- BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)
同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...
随机推荐
- MATLAB坐标系中绘制图片
MATLAB坐标系中绘制图片 方法一 使用图片坐标循环的方式,代码如下. clear,clc,close all tic; map=imbinarize(imread('map.bmp'));%map ...
- spring boot + quartz 集群
spring boot bean配置: @Configuration public class QuartzConfig { @Value("${quartz.scheduler.insta ...
- JavaScript设计模式之一封装
对于熟悉C#和Java的兄弟们,面向对象的三大思想(封装,继承,多态)肯定是了解的,今天我想讲讲如何在Javascript中利用封装这个特性,开讲! 我们会把现实中的一些事物抽象成一个Class并且把 ...
- 使用LSTM和Softmx来进行意图识别
前言 在前面我们大致介绍了什么是意图识别,把这个问题抽象出来其实是一个分类问题.在结构上面,我们使用LSTM来提取特征,Softmax来进行最后的多分类.由于语料的限制,我们目前仅考虑电台,音乐,问答 ...
- Angular为什么选择TypeScript?
原文地址:https://vsavkin.com/writing-angular-2-in-typescript-1fa77c78d8e8 本文转自:http://www.chinacion.cn/a ...
- Oracle 11g一步步安装详解
本文所需的安装包都存放在我网盘中,需要的私聊~ 一.安装VMware tools工具(非必须) 1.虚拟机上点击安装 因为我在虚拟机中做的,后面oracle 安装是图形化安装,需要屏幕大一点,不然有些 ...
- Rafy 开源贡献中心 - 组织成立,并试运行一月小结
背景 最近两年,工作中虽然大量使用了 Rafy 框架作为各个产品.项目的开发框架.我是 2015 年的年中加入现在这家公司的,由于我个人工作太忙的缘故,一直没怎么编码,Rafy 框架底层的核心成长也比 ...
- PHP中的 $_SERVER 函数说明详解
用php在开发软件的时候,我们经常用到 $_SERVER[]这个函数,今天就来讲下这个数组的值,方便以后使用: A: $_SERVER['ARGC'] #包含传递给程序的 命令行参数的个数(如果运行在 ...
- 记录一次坑爹的Python脚本抢购低价手机经历!
无意间浏览到魅族官网,说魅族3限量100台.30号中午12点抢购.正好我爪机目前处于报废状态,就来一试手气了.11点多种,习惯性的看了下网页脚本,发现了检测是否到抢购时间,并返回抢购消息的ajax.于 ...
- vim编辑器常见命令归纳大全
Esc:命令行模式 i:插入命令 a:附加命令 o:打开命令 c:修改命令 r:取代命令 s:替换命令 以上进入文本输入模式 : 进入末行模式 末行模式: w:保存 q:退出,没保存则无法退出 w ...