乍一看题面:$$a^x \equiv b \ (mod \ m)$$

是一道BSGS,但是很可惜$m$不是质数,而且$(m, a) \not= 1$,这个叫扩展BSGS【额......

于是我们需要通过变换使得$(m, a) = 1$

首先令$g = (a, m)$,则原式等价于:$$a ^ x + k * m = b, k \in \mathbb{Z}$$

移项可得:$$\frac{a} {g} * a ^ {x - 1} + k * \frac {m} {g} = \frac {b} {g}$$

此时如果$b \not \equiv 0 (mod\ g)$则无解

令$m' = \frac {m} {g}, b' = \frac {b} {g} * (\frac{a} {g}) ^ {-1}$

于是得到新式:$$a ^ {x - 1} = b' (mod\ m')$$

于是可以一直迭代到$(m, a) = 1$,然后用BSGS来计算答案即可

 /**************************************************************
Problem: 2480
User: rausen
Language: C++
Result: Accepted
Time:3256 ms
Memory:1568 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/hash_policy.hpp> using namespace std;
using namespace std;
typedef long long ll;
typedef __gnu_pbds::cc_hash_table <int, int> hash; inline int read(); int a, b, m, ans;
hash h; inline int pow(ll x, ll y, ll mod) {
static ll res;
res = ;
while (y) {
if (y & ) res = res * x % mod;
x = x * x % mod, y >>= ;
}
return (int) res;
} inline int BSGS(int a, int b, int p, ll now) {
static int m, i;
static ll base;
m = (int) ceil(sqrt(p)), base = b;
h.clear();
for (i = ; i < m; ++i)
h[base] = i, base = base * a % p; base = pow(a, m, p);
for (i = ; i <= m + ; ++i) {
now = now * base % p;
if (h.find(now) != h.end()) return i * m - h[now];
}
return -;
} int extend_BSGS(int a, int b, int m) {
static int cnt, g, res;
static ll t;
a %= m, b %= m;
if (b == ) return ;
cnt = , g = __gcd(a, m), t = ;
while (g != ) {
if (b % g) return -;
m /= g, b /= g, t = t * a / g % m;
++cnt;
if (b == t) return cnt;
g = __gcd(a, m);
}
res = BSGS(a, b, m, t);
return ~res ? res + cnt : res;
} int main() {
while () {
a = read(), m = read(), b = read();
if (!a && !m && !b) return ;
ans = extend_BSGS(a, b, m);
if (!~ans) puts("No Solution");
else printf("%d\n", ans);
}
return ;
} inline int read() {
static int x;
static char ch;
x = , ch = getchar();
while (ch < '' || '' < ch)
ch = getchar();
while ('' <= ch && ch <= '') {
x = x * + ch - '';
ch = getchar();
}
return x;
}

BZOJ2480 Spoj3105 Mod的更多相关文章

  1. BZOJ2480 Spoj3105 Mod 数论 扩展BSGS

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2480.html 题目传送门 - BZOJ2480 题意 已知数 $a,p,b$ ,求满足 $a^x≡b ...

  2. 【bzoj2480】Spoj3105 Mod

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

  3. 【模板】exBSGS/Spoj3105 Mod

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

  4. 【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      ...

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

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

  6. bzoj 3239: Discrete Logging && 2480: Spoj3105 Mod【BSGS】

    都是BSGS的板子题 此时 \( 0 \leq x \leq p-1 \) 设 \( m=\left \lceil \sqrt{p} \right \rceil ,x=i*m-j \)这里-的作用是避 ...

  7. [luogu4195 Spoj3105] Mod (大步小步)

    传送门 题目描述 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. 输入输出格式 输入格式: 每个测试文件中最多包含100组测试数据. 每组数据中,每行包含3个正整数a,p,b. 当a ...

  8. P4195 【模板】exBSGS/Spoj3105 Mod

    传送门 首先要懂得 $BSGS$,$BSGS$ 可以求出关于 $Y$ 的方程 $X^Y \equiv Z (mod\ mo)$ 的最小解,其中 $gcd(X,Z)=1$ $exBSGS$ 算是 $BS ...

  9. spoj3105 MOD - Power Modulo Inverted(exbsgs)

    传送门 关于exbsgs是个什么东东可以去看看yyb大佬的博客->这里 //minamoto #include<iostream> #include<cstdio> #i ...

随机推荐

  1. http.Handler 与Go的错误处理

    原文地址    在之前我写过一篇关于通过使用http.HandlerFunc来实现一个定制handler类型用来避免一些平常的错误的文章.func MyHandler(w http.ResponseW ...

  2. Centos7中源码安装Nodejs

    Step 1.确认服务器有nodejs编译及依赖相关软件,如果没有可通过运行以下命令安装. [root@BobServerStation local]# yum -y install gcc gcc- ...

  3. 微软 .net 你更新这么快IDE vs2015 、语法糖 6.0、framework、‘吹得这么牛,然并用

    好久没写吐槽文章了,因为无尽的加班,也因为工作的变迁,又因为最近看了微软又尼玛发布什么什么,好受不了. 今年大专毕业第八个年头了,人也到了30,真是光阴荏苒啊.最近这一两年发生了很多事,让我自己倍受打 ...

  4. viewdata向view传递匿名类,view该如何遍历?

    //方法中的代码var userInfoList = from p in db.UserInfo select new {UserID=p.ID, UserName = p.UName, UserPw ...

  5. delphi TIdHTTP Post乱码问题

    这里主要说的是中文乱码的问题 1. 发过去的是乱码如下处理, 服务器采用的是UFT-8编码的情况下 uses  HTTPApp;      sPost := HTTPEncode(UTF8Encode ...

  6. 十、Java基础---------面向对象之抽象类与接口

    抽象类(abstract)     当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体.但是在某些情况下,某个父类只是知道子类应该包含怎样的方 ...

  7. .NET 使用CouchBase 基础篇

    2011年2月,CouchOne和memebase合并后,改名为Couchbase,官网地址(www.couchbase.com).membase最后一个版本为1.7.2,可在Couchbase的官网 ...

  8. Master page and jquery

    1.download latest jqury http://jquery.com/download/ 2.download latest jquery.ui, Theme select " ...

  9. maven nexus

    部署nexus步骤: 1.下载解压安装包到指定目录 2.设置环境变量(当然还有JAVA,jdk) 3.在配置文件(G:\nexus\nexus-2.3.1-01-bundle\nexus-2.3.1- ...

  10. 如何清理photoshop cs6 被升级的烦人的adobe creative cloud组件

    安装photoshop cs6(虽然目前已经退出到cc 2015,不过因激活成熟度等,我还是偏向于使用cs6,够用!),默认安装adobe application manager. 不过如果不小心单独 ...