传送门

题目描述

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

输入输出格式

输入格式:

每个测试文件中最多包含100组测试数据。

每组数据中,每行包含3个正整数a,p,b。

当a=p=b=0时,表示测试数据读入完全。

输出格式:

对于每组数据,输出一行。

如果无解,输出“No Solution”(不含引号),否则输出最小自然数解。

输入输出样例

输入样例#1:

5 58 33

2 4 3

0 0 0

输出样例#1:

9

No Solution

说明

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

题解

大步小步模板

code:(在luogu不开氧气过不了QAQ)

#include<map>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
#define M(a,b) memset(a,(b),sizeof(a))
#define F(i,a,b) for(int i=(a);i<=(b);i++)
#define C(i,a,b) for(int i=(b);i>=(a);i--)
#define E(i,u) for(int i=head[u];i;i=nex[i])
using namespace std; LL rd() {
LL x=0,f=1; char c=getchar();
while(!isdigit(c)) {if(c=='-') f=-f;c=getchar();}
while(isdigit(c)) x=(x<<3)+(x<<1)+c-48,c=getchar();
return x*f;
} LL gcd(LL a,LL b) {return b?gcd(b,a%b):a;} LL qpow(LL a,LL b,LL p) {
LL ans=1;
while(b) { if(b&1) ans=a*ans%p; a=a*a%p; b>>=1; }
return ans;
} int BSGS(int a,int b,int p) {
a%=p,b%=p; if(b==1) return 0;
int cnt=0; LL t=1;
for(int g=gcd(a,p);g!=1;g=gcd(a,p)) {
if(b%g) return -1;
p/=g,b/=g; t=t*a/g%p; cnt++;
if(b==t) return cnt;
}
map <LL,int> M;
int m=int(sqrt(1.0*p)+1); LL tmp=b;
F(i,0,m) M[tmp]=i,tmp=tmp*a%p;
tmp=qpow(a,m,p);
LL now=t;
F(i,1,m+1) {
now=now*tmp%p;
if(M.count(now)) return i*m-M[now]+cnt;
}
return -1;
} int main() {
int a,b,p;
while(~scanf("%d %d %d",&a,&p,&b)&&p) {
int ans=BSGS(a,b,p);
if(ans==-1) puts("No Solution");
else printf("%d\n",ans);
}
return 0;
}

[luogu4195 Spoj3105] Mod (大步小步)的更多相关文章

  1. BSGS 扩展大步小步法解决离散对数问题 (BZOJ 3239: Discrete Logging// 2480: Spoj3105 Mod)

    我先转为敬? orz% miskcoo 贴板子 BZOJ 3239: Discrete Logging//2480: Spoj3105 Mod(两道题输入不同,我这里只贴了3239的代码) CODE ...

  2. BSGS&EXBSGS 大手拉小手,大步小步走

    大步小步走算法处理这样的问题: A^x = B (mod C) 求满足条件的最小的x(可能无解) 其中,A/B/C都可以是很大的数(long long以内) 先分类考虑一下: 当(A,C)==1 即A ...

  3. 离散对数&&大步小步算法及扩展

    bsgs algorithm ax≡b(mod n) 大步小步算法,这个算法有一定的局限性,只有当gcd(a,m)=1时才可以用 原理 此处讨论n为素数的时候. ax≡b(mod n)(n为素数) 由 ...

  4. 大步小步算法模板题, poj2417

    大步小步模板 (hash稍微有一点麻烦, poj不支持C++11略坑) #include <iostream> #include <vector> #include <c ...

  5. [模板]大步小步算法——BSGS算法

    大步小步算法用于解决:已知A, B, C,求X使得 A^x = B (mod C) 成立. 我们令x = im - j | m = ceil(sqrt(C)), i = [1, m], j = [0, ...

  6. 离散对数及其拓展 大步小步算法 BSGS

    离散对数及其拓展 离散对数是在群Zp∗Z_{p}^{*}Zp∗​而言的,其中ppp是素数.即在在群Zp∗Z_{p}^{*}Zp∗​内,aaa是生成元,求关于xxx的方程ax=ba^x=bax=b的解, ...

  7. 【模板】exBSGS/Spoj3105 Mod

    [模板]exBSGS/Spoj3105 Mod 题目描述 已知数\(a,p,b\),求满足\(a^x\equiv b \pmod p\)的最小自然数\(x\). 输入输出格式 输入格式: 每个测试文件 ...

  8. 【bzoj2480】Spoj3105 Mod

    2480: Spoj3105 Mod Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 557  Solved: 210[Submit][Status][ ...

  9. 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ...

随机推荐

  1. HDU1079-Calendar Game 简单思维博弈··

    题意:给你1990,1.1----2001.11.4范围内的某一天,格式year month day  两人轮流操作: 1. day+1; 2.month + 1: 谁先达到2001.11.4号,谁获 ...

  2. [luogu3627 APIO2009] 抢掠计划 (tarjan缩点+spfa最长路)

    传送门 Description Input 第一行包含两个整数 N.M.N 表示路口的个数,M 表示道路条数.接下来 M 行,每行两个整数,这两个整数都在 1 到 N 之间,第 i+1 行的两个整数表 ...

  3. Top English interview Q&A

    http://www.hjenglish.com/new/p581292/ vocabulary endeavour [ɪn'devər] relevant ['reləvənt] , efficie ...

  4. Spring事务管理 与 SpringAOP

    1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略.  ...

  5. 2015 Multi-University Training Contest 10 hdu 5411 CRB and Puzzle

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  6. C#--文件操作的一些技巧

    Using的特点 Using 打开什么,就自动关闭什么,using中包含的其他类是否关闭,using是不管的 XML文档读取 重点:必须是标准的xml文档,否则会出错 string xmlxx = @ ...

  7. PowerDesigner16 破解

    近期开发项目,涉及到实体设计这块的时候,用的是PowerDesigner16,使用是挺方便的,可是存在一个问题.那就是PowerDesigner16存在一个试用期的问题,过期就打不开了. 之前好多同学 ...

  8. 深刻理解Java中的String、StringBuffer和StringBuilder的差别

    声明:本博客为原创博客,未经同意.不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(链接为http://blog.csdn.net/bettarwang/article/detai ...

  9. Oracle数据处理

    DML语言             &:地址符:(PrepareStament)             批处理:插入--------一次将10号部门的员工插入新的表中:           ...

  10. 2015.03.13,外语,读书笔记-《Word Power Made Easy》 10 “如何讨论交谈习惯”学习笔记 SESSION 26

    1.a Spartan virtue 古斯巴达人中一位有名的Laconia国王,其言语比Vermonter(美国佛蒙特州人)还简洁.一个传说,马其顿菲利普国王(亚历山大的老爸)要进攻他们的都城,发了一 ...