题意:

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. 洛谷P3254 圆桌问题 网络流_二分图

    Code: #include<cstdio> #include<algorithm> #include<vector> #include<queue> ...

  2. 洛谷P1136 迎接仪式 动态规划

    显然,这是一道动归题. 我们发现,每次交换时只可能交换不同的字母(交换同类字母显然是没有意义的).那么每次交换等同于将 111 个 "j""j""j& ...

  3. POJ-1113 Wall 计算几何 求凸包

    题目链接:https://cn.vjudge.net/problem/POJ-1113 题意 给一些点,求一个能够包围所有点且每个点到边界的距离不下于L的周长最小图形的周长 思路 求得凸包的周长,再加 ...

  4. BZOJ 2555 SubString(LCT+后缀树)

    喜闻乐见的LCT+SAM 此题要求动态插入,直接上后缀树.然后询问其实就是求一个节点的子树后缀结束节点的个数. 因为建立后缀树需要插入和删除,就直接上LCT.每次加入一个点,把它到根的路径加一 (现在 ...

  5. [NOIP2015普及组]推销员

    题目:洛谷P2672.codevs5126.Vijos P1977 题目大意:有个推销员要去推销,要你求他推销1~n户人家分别最多花多少“疲劳值”.具体见题目. 解题思路:如果用$O(n^2)$做的话 ...

  6. CF1065D Three Pieces (多元最短路)

    题目大意:给你一个棋盘,你需要控制棋子依次经过编号为1~n的所有点,棋子的可以是车,马,象,都依照国际象棋的行棋方式,每走一步消耗1单位时间,但每次更换棋子都需要额外1单位时间,求经过所有点需要的最少 ...

  7. 【Paper Reading】Improved Textured Networks: Maximizing quality and diversity in Feed-Forward Stylization and Texture Synthesis

    Improved Textured Networks: Maximizing quality and diversity in Feed-Forward Stylization and Texture ...

  8. 关于数组array_diff(array1, array2)求差集来比较数组是否相等的问题细究

    无意中发现很多朋友都喜欢使用array_diff(array1, array2)来判断两个数组是否相等, 我自己也偶尔会这么使用 但是今天我在写代码的过程中无意发现这么做是不准确的. 首先我们来看一下 ...

  9. Github README.md中添加图片

    1.先把图片上传到你的项目中:然后在github网站上按路径打开图片,如下打开的图片链接: 2.复制图片的地址 3.然后在README.md写上: ![这里随便写文字](你刚复制的图片路径) 注意  ...

  10. 【Henu ACM Round#24 B】Gargari and Bishops

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果写过n皇后问题. 肯定都知道 某个点(i,j)和它在同一条对角线上的点分别是i+j的值和i-j的值相同的点. 然后会发现选择的两 ...