BZOJ2480 Spoj3105 Mod
乍一看题面:$$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的更多相关文章
- BZOJ2480 Spoj3105 Mod 数论 扩展BSGS
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2480.html 题目传送门 - BZOJ2480 题意 已知数 $a,p,b$ ,求满足 $a^x≡b ...
- 【bzoj2480】Spoj3105 Mod
2480: Spoj3105 Mod Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 557 Solved: 210[Submit][Status][ ...
- 【模板】exBSGS/Spoj3105 Mod
[模板]exBSGS/Spoj3105 Mod 题目描述 已知数\(a,p,b\),求满足\(a^x\equiv b \pmod p\)的最小自然数\(x\). 输入输出格式 输入格式: 每个测试文件 ...
- 【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 ...
- BSGS 扩展大步小步法解决离散对数问题 (BZOJ 3239: Discrete Logging// 2480: Spoj3105 Mod)
我先转为敬? orz% miskcoo 贴板子 BZOJ 3239: Discrete Logging//2480: Spoj3105 Mod(两道题输入不同,我这里只贴了3239的代码) CODE ...
- 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 \)这里-的作用是避 ...
- [luogu4195 Spoj3105] Mod (大步小步)
传送门 题目描述 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. 输入输出格式 输入格式: 每个测试文件中最多包含100组测试数据. 每组数据中,每行包含3个正整数a,p,b. 当a ...
- P4195 【模板】exBSGS/Spoj3105 Mod
传送门 首先要懂得 $BSGS$,$BSGS$ 可以求出关于 $Y$ 的方程 $X^Y \equiv Z (mod\ mo)$ 的最小解,其中 $gcd(X,Z)=1$ $exBSGS$ 算是 $BS ...
- spoj3105 MOD - Power Modulo Inverted(exbsgs)
传送门 关于exbsgs是个什么东东可以去看看yyb大佬的博客->这里 //minamoto #include<iostream> #include<cstdio> #i ...
随机推荐
- ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL
ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流量. ...
- Qt之qt4.7 和qt 4.8.4 交叉实践
开发机环境搭建: 测试环境:CentOs7.1 Ubuntu 12.0.4 操作流程: 一.编译Qt4.7.0 1)CentOS上实践 1.tar xzvf qt-everywhere-openso ...
- 智能家居常用WiFi模块
WiFi模块 WiFi模块就是整个系统的控制中心,控制很简单,就是输出一个开关信号控制继电器,而这个模块的核心是WiFi的连接,手机连接WiFi时需要扫描,输入密码,而这类本身没有屏幕和键盘的硬件设备 ...
- 助手系列之python的FTP服务器
电脑的OS是Win7,Python版本是2.7.9,安装了pip 因为python没有内置可用的FTP SERVER,所以先选一个第三方的组件安装上,这里我选的是pyftpdlib pip insta ...
- phpcms无法读取index.html的解决步骤
代码如下: phpcms\modules\content\classes\html.class.php 查找 复制代码 代码如下: /** * 更新首页 */ public function inde ...
- [已解决] java.net.InetAddress.getHostName() 阻塞问题
在学习java nio的过程中发现某些情况下使用该方法会导致程序阻塞,(情况:服务器,Linux:客户端,WIN10) java.net.InetAddress.getHostName() 阻塞情况如 ...
- mysql分区表的原理和优缺点
1.分区表的原理 分区表是由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区,存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分 ...
- lua table 排序--满足多条件排序
前提 假设 一个小怪 有三种属性,等级(level).品质(quality).id(pid) 我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序 ...
- Prime Query (ZOJ 3911 线段树)
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a sequen ...
- 什么是 HTML?
前言 在 W3C(万维网联盟)官网里,有一套针对于初学者的 HTML 培训教程,为期四周.为了提升自己的翻译水平,同时帮助大家入门,我给大家翻译出来,以供参考. 1. 什么是 HTML HTML 是创 ...