题目描述

已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x。

输入

    每个测试文件中最多包含100组测试数据。
    每组数据中,每行包含3个正整数a,p,b。
    当a=p=b=0时,表示测试数据读入完全。

输出

    对于每组数据,输出一行。
    如果无解,输出“No Solution”(不含引号),否则输出最小自然数解。

样例输入

5 58 33
2 4 3
0 0 0

样例输出

9
No Solution

提示

100%的数据,a,p,b≤1e9。

$EXBSGS$模板题,注意特判当$p=1$时输出$0$。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
map<int,int>mp;
ll a,b,p,ans;
inline ll gcd(ll x,ll y)
{
return y==0?x:gcd(y,x%y);
}
inline void exgcd(ll &x,ll &y,ll a,ll b)
{
if(!b)
{
x=1,y=0;
return ;
}
exgcd(y,x,b,a%b);
y-=(a/b)*x;
return ;
}
inline ll quick(ll x,ll y,ll mod)
{
ll res=1ll;
while(y)
{
if(y&1)
{
res=res*x%mod;
}
y>>=1;
x=x*x%mod;
}
return res;
}
inline ll BSGS(ll a,ll b,ll p,ll g)
{
ll x,y;
ll m=ceil(sqrt(p));
exgcd(x,y,g,p);
b=(b*x%p+p)%p;
ll num=quick(a,m,p);
exgcd(x,y,num,p);
num=(x%p+p)%p;
ll sum=1ll;
mp.clear();
for(int i=0;i<=m;i++)
{
if(!mp.count(sum))
{
mp[sum]=i;
}
sum*=a,sum%=p;
}
for(int i=0;i<=m;i++)
{
if(mp[b])
{
return mp[b]+i*m;
}
b*=num,b%=p;
}
return -1;
}
inline int EX_BSGS(int a,int b,int p)
{
ll g=1ll;
ll k=0;
ll d,ans;
if(b==1)
{
return 0;
}
while((d=gcd(a,p))!=1)
{
if(b%d)
{
return -1;
}
k++,b/=d,p/=d,g=g*(a/d)%p;
if(g==b)
{
return k;
}
}
ans=BSGS(a,b,p,g);
return ans==-1?-1:ans+k;
}
int main()
{
while(scanf("%d%d%d",&a,&p,&b))
{
if(!a&&!b&&!p)
{
break;
}
if(p==1)
{
printf("0\n");
continue;
}
ans=EX_BSGS(a,b,p);
printf(ans==-1?"No Solution\n":"%d\n",ans);
}
}

BZOJ2480Spoj3105 Mod&BZOJ1467Pku3243 clever Y——EXBSGS的更多相关文章

  1. 【BZOJ1467/2480】Pku3243 clever Y/Spoj3105 Mod EXBSGS

    [BZOJ1467/2480]Pku3243 clever Y/Spoj3105 Mod Description 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. Input      ...

  2. bzoj1467 Pku3243 clever Y

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 313  Solved: 181[Submit][Status ...

  3. 【EX_BSGS】BZOJ1467 Pku3243 clever Y

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 238[Submit][Status ...

  4. luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法

    BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...

  5. bzoj 1467: Pku3243 clever Y 扩展BSGS

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...

  6. [拓展Bsgs] Clever - Y

    题目链接 Clever - Y 题意 有同余方程 \(X^Y \equiv K\ (mod\ Z)\),给定\(X\),\(Z\),\(K\),求\(Y\). 解法 如题,是拓展 \(Bsgs\) 板 ...

  7. poj3243 Clever Y[扩展BSGS]

    Clever Y Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8666   Accepted: 2155 Descript ...

  8. MOD - Power Modulo Inverted(SPOJ3105) + Clever Y(POJ3243) + Hard Equation (Gym 101853G ) + EXBSGS

    思路: 前两题题面相同,代码也相同,就只贴一题的题面了.这三题的意思都是求A^X==B(mod P),P可以不是素数,EXBSGS板子题. SPOJ3105题目链接:https://www.spoj. ...

  9. POJ 3243 Clever Y (求解高次同余方程A^x=B(mod C) Baby Step Giant Step算法)

    不理解Baby Step Giant Step算法,请戳: http://www.cnblogs.com/chenxiwenruo/p/3554885.html #include <iostre ...

随机推荐

  1. 分布式事务框架Seata及EasyTransaction架构的比对思考

    本文将会对比Seata与EasyTransaction两个分布式事务的一些高层设计,相信大家会有收获. Seata的概述 Seata(曾用名Fescar,开源版本GTS)是阿里的开源分布式事务框架,其 ...

  2. sql面试学到新内容

    1.事物的保存点 MYSQL可以让我们对事务进行部分回滚,就是在事务里调用SAVEPOINT语句来设置一些命名标记.如果想要回滚到那个标记点位置,需要使用ROLLBACK语句来指定哪个保存点. mys ...

  3. H5 24-CSS三大特性之继承性

    24-CSS三大特性之继承性 我是段落 我是段落 我是超链接 我是大标题 <!DOCTYPE html> <html lang="en"> <head ...

  4. hibernate坑边闲话

    使用hibernate各种各样的坑 Remember that ordinal parameters are 1-based node to traverse cannot be null 这两个错误 ...

  5. sczd

  6. CodeForces 550E Brackets in Implications 推理

    给出一个四个规则 0->0=1  0->1=1 1->0=0  1->1=0 我自己当时一味的去找规律,没有把式子好好推一推. 当然每个人都能想到a[n]=0是必须的 当a[n ...

  7. Windows之PowerShell使用命令

    Windows之PowerShell使用命令 切换 命令格式: cd [option] 切换到上一级目录 cd ../ 或者 cd .. 不同磁盘之间切换 盘符: 清屏 清空当前窗口的内容 cls 查 ...

  8. Linux之查看系统配置命令

    1.查看CPU个数: [root@ifusion ~]# lscpu 2.查看CPU进程数.核数: [root@ifusion ~]# cat /proc/cpuinfo 3.查看内存总量: [roo ...

  9. winform使用相关

    1.回车键触发按钮点击事件——回车登录 设置窗体的AccessButton属性 2.密码框样式设置 设置PasswordChar为想要的密码显示的样式,如*  3.设置窗口居中 设置StartPosi ...

  10. webdriver问题汇总

    如果你的selenium是3.X版本的,火狐浏览器需要geckodriver这个组件的支持,而谷歌浏览器需要chromedriver的支持,selenium是2.X版本则不需要. 使用selenium ...