题意:

id=2242">链接

方法: BSGS+高速幂+EXGCD

解析:

BSGS…

题解同上..

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MOD 140345
using namespace std;
typedef long long ll;
ll t,k,ans;
ll y,z,p;
int head[MOD+10],cnt;
struct node
{
ll from,to,val,next;
}edge[MOD+10];
void init()
{
memset(head,-1,sizeof(head));
cnt=1;
}
void edgeadd(ll from,ll to,ll val)
{
edge[cnt].from=from,edge[cnt].to=to,edge[cnt].val=val;
edge[cnt].next=head[from];
head[from]=cnt++;
}
ll quick_my(ll x,ll y)
{
ll ret=1;
while(y)
{
if(y&1)ret=(ret*x)%p;
x=(x*x)%p;
y>>=1;
}
return ret;
}
void exgcd(ll a,ll b,ll &x,ll &y,ll &gcd)
{
if(!b)
{
x=1,y=0,gcd=a;
return;
}
exgcd(b,a%b,y,x,gcd);
y=y-a/b*x;
}
void BSGS(ll A,ll B,ll C)
{
//A^x=B(mod C)
ll m=(int)ceil(sqrt(C));
ll k=1;
for(int i=0;i<m;i++)
{
int flag=1;
for(int j=head[k%MOD];j!=-1;j=edge[j].next)
{
if(edge[j].val==k){flag=0;continue;}
}
if(flag)edgeadd(k%MOD,i,k);
k=k*A%C;
}
ll X,Y,GCD;
exgcd(k,C,X,Y,GCD);
ll invk=(X%C+C)%C;
ll D=1,invD=1;
for(int i=0;i<=m;i++)
{
ll tmpB=B*invD%C;
for(int j=head[tmpB%MOD];j!=-1;j=edge[j].next)
{
if(edge[j].val==tmpB){ans=i*m+edge[j].to;return;}
}
D=D*k%C;
invD=invD*invk%C;
}
}
int main()
{
scanf("%lld%lld",&t,&k);
switch(k)
{
case 1:
while(t--)
{
scanf("%lld%lld%lld",&y,&z,&p);
printf("%lld\n",quick_my(y,z));
}
break;
case 2:
while(t--)
{
ll x,tmp,gcd;
scanf("%lld%lld%lld",&y,&z,&p);
exgcd(y,p,x,tmp,gcd);
if(z%gcd!=0)puts("Orz, I cannot find x!");
else
{
ll mod=p/gcd;
printf("%lld\n",((x*z/gcd)%mod+mod)%mod);
}
}
break;
case 3:
while(t--)
{
init();
scanf("%lld%lld%lld",&y,&z,&p);
ans=-1;
if(y%p==0&&z!=0){puts("Orz, I cannot find x!");continue;}
BSGS(y,z,p);
if(ans==-1)puts("Orz, I cannot find x!");
else printf("%lld\n",ans);
}
}
}

BZOJ 2242 [SDOI2011]计算器 BSGS+高速幂+EXGCD的更多相关文章

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

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

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

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

  3. bzoj 2242 [SDOI2011]计算器——BSGS模板

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一道BSGS! 咳咳,我到底改了些什么?…… 感觉和自己的第一版写的差不多……可能是 ...

  4. BZOJ 2242 [SDOI2011]计算器 | BSGS

    insert的时候忘了取模了-- #include <cstdio> #include <cmath> #include <cstring> #include &l ...

  5. bzoj 2242: [SDOI2011]计算器 & BSGS算法笔记

    这题的主要难点在于第三问该如何解决 于是就要知道BSGS是怎样的一种方法了 首先BSGS是meet in the middle的一种(戳下面看) http://m.blog.csdn.net/blog ...

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

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

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

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

  8. BZOJ 2242 [SDOI2011]计算器 ——EXGCD/快速幂/BSGS

    三合一的题目. exgcd不解释,快速幂不解释. BSGS采用了一种不用写EXGCD的方法,写起来感觉好了很多. 比较坑,没给BSGS的样例(LAJI) #include <map> #i ...

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

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

随机推荐

  1. mysql 临时表和内存表

    查看内存表的最大值: show variables like '%heap%'; mysql> show variables like '%heap%'; +------------------ ...

  2. tinymce原装插件源码分析(三)-code

    code: 用于显示源码.主要包含一个弹框.设置显示内容以及内容的更新. function showDialog() { var win = editor.windowManager.open({ t ...

  3. 获取mapper

    static UpdateLogMapper updateLogMapper = (UpdateLogMapper)SpringContextUtil.getBean(UpdateLogMapper. ...

  4. python字典对象的update()方法

    使用字典对象的update()方法,如A.update(B),将B字典的键值对一次性全部添加到A字典对象,当A字典为空时,相当于深复制,非常方便.如果两个字典中存在相同的键,则进行值的更新. A={} ...

  5. 兼顾php和jquery新版本的checkbox的写法

    <input type="checkbox" class="scate_item" name="scategories[]" valu ...

  6. Java设置Client Socket链接Server超时时间

    Java设置Client Socket链接Server超时时间 学习了:http://blog.csdn.net/tterminator/article/details/52494141 http:/ ...

  7. Step by Step Do IOS Swift CoreData Simple Demo

    简单介绍 这篇文章记录了在 IOS 中使用 Swift 操作 CoreData 的一些基础性内容,因为缺乏文档,基本上都是自行实验的结果.错漏不可避免,还请谅解. 部分内容借鉴了 Tim Roadle ...

  8. 【LeetCode OJ 34】Search for a Range

    题目链接:https://leetcode.com/problems/search-for-a-range/ 题目:Given a sorted array of integers, find the ...

  9. iOS设计模式之NSNotificationCenter 消息中心

    消息中心模式和KVO模式有点相似,差别在于.KVO  模式是意图在于监听摸一个相应的值的变化.而去出发一个方法相应的动作.而消息中心在于,广播.它就像一个广播基站,发送一条消息,在全部的加入监听的地方 ...

  10. ios 将随意对象存进数据库

    要将一个对象存进数据库的blob字段,最好先转为NSData.一个对象要遵守NSCoding协议,实现协议中对应的方法,才干转成NSData. NSData *statusData = [NSKeye ...