传送门

题目描述

已知数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. 【hdu 6351】Beautiful Now

    [链接] 我是链接,点我呀:) [题意] 你可以最多交换k次数字. 让你组成一个最大的和一个最小的数字. [题解] 直接写个bfs.求出所有状态的最小交换次数. 但是最大值和最小值分开写. 做最大值的 ...

  2. poj 1611 简单并查集的应用

    #include<stdio.h> #define N 31000 int pre[N]; int find(int x) { if(x!=pre[x])     pre[x]=find( ...

  3. ASP.NET-AD开发技巧

    分享一篇很好的介绍AD属性的文章 AD图片插件 如何给AD添加图片 http://www.doc88.com/p-9542932844870.html AD过滤条件 重命名ou使用user.Renam ...

  4. [SharePoint][SharePoint Designer 入门经典]Chapter12 高级工作流

    1.使用Visio2010创建工作流标志 2.使用Visio Graphic服务可视化一个运行的工作流 3.使用InfoPath2010修饰工作流表单 4.导出可重用的工作流

  5. 【HDOJ 2063】过山车

    [HDOJ 2063]过山车 二分图最大匹配模板题 1女对n男 问匹配最大对数 代码例如以下: #include <iostream> #include <cstdlib> # ...

  6. IntelliJ IDEA 对于generated source的处理

    IntelliJ IDEA 对于generated source的处理 学习了:https://stackoverflow.com/questions/5170620/unable-to-use-in ...

  7. python3连接Mairadb数据库

    <span style="font-size:18px;">#本代码演示的是python3.3.5下连接Mairadb数据库</span> <span ...

  8. sql查询语句中的乱码 -- 前面加N

    直接运行sql出出现乱码,在中文字符前加N就能够正常显示了.N的含义就是用nvarchar格式显示.

  9. PHP别名引用错误:“The use statement with non-compound name … has no effect”

    别名概述 PHP5.3+支持命名空间:namespace,命名空间的一个重要功能是能够使用别名(alias)来引用一个符合规则的名字. 命名空间支持3中形式的别名引用(或称之为引入)方式:类(clas ...

  10. 2015.04.16,外语,读书笔记-《Word Power Made Easy》 11 “如何辱骂敌人” SESSION 28

    TEASER PREVIEW (Teaser 片头,预告片,玩笑 Teaser trailer:预告片) 如何称呼这些人: 完全盲目的服从(obedience [әu'bi:diәns] n. 服从, ...