【[TJOI2007]可爱的质数】
用一道板子题来复习一下\(bsgs\)
\(bsgs\)用于求解形如
\]
这样的高次不定方程
由于费马小定理的存在,我们可是直接暴力扫一遍\(p\),由于\(p-1\)次之后肯定会有循环节出现,所以\(O(p)\)时间内就可以出解
\(bsgs\)本质上就是一种分块了
设\(m=ceil(\sqrt{p})\),我们设\(x=i\times m-j\)
显然我们只需要\(i,j\in[0,m]\)就可以令\(x\)表示\([0,p]\)之间的所有数
现在我们的方程变成了这个样子
\]
也就是
\]
我们可以先开一个\(hash\)表,把所有\(b\times a^j\),其中\(j\in[0,m]\)的值存下来
之后我们挨个检验\(a^{i\times m}\)的值就好了,如果在\(hash\)表里找到和\(a^{i\times m}\)相等的数,那么\(i\times m-j\)就是答案了
代码
#include<cmath>
#include<cstdio>
#include<cstring>
#include<tr1/unordered_map>
#define re register
#define LL long long
using namespace std::tr1;
unordered_map<LL,LL> ma;
LL a,b,P;
int m;
inline LL quick(LL a,LL b) {LL S=1;while(b) {if(b&1) S=S*a%P;b>>=1;a=a*a%P;}return S;}
int main()
{
scanf("%lld%lld%lld",&P,&a,&b);
m=ceil(std::sqrt(P));
LL S=1,t=quick(a,m);
for(re int i=0;i<=m;i++) ma[S*b%P]=i%P,S=S*a%P;
S=t;
for(re int i=1;i<=m;i++)
{
if(ma[S]) {LL ans=i*m-ma[S];printf("%d\n",(ans%P+P)%P);return 0;}
S=S*t%P;
}
puts("no solution");
return 0;
}
【[TJOI2007]可爱的质数】的更多相关文章
- [Luogu] P3846 [TJOI2007]可爱的质数
题目描述 给定一个质数P(2<=P<2312^{31}231),以及一个整数B(2<=B<P),一个整数N(2<=N<P). 现在要求你计算一个最小的L,满足BL≡ ...
- Luogu P3846 [TJOI2007] 可爱的质数/【模板】BSGS
题意 给定 \(y,z,p\),求最小的正整数 \(x\) 满足 \(y^x\equiv z\bmod p\),保证 \(p\) 是质数. \(\texttt{Data Range:}2\leq y, ...
- 【洛谷 P3846】 [TJOI2007]可爱的质数 (BSGS)
题目链接 \(BSGS\)模板题..不会点这里 #include <cstdio> #include <cmath> #include <map> using na ...
- [TJOI2007] 可爱的质数
题意 求最小的\(x\)满足\(a^x \equiv b\mod p\) 想法 这个是标准的板子题,\(BSGS\)算法可以用来解决\(a^x \equiv b\mod p\) 和 \(x^a \eq ...
- BSGS及扩展BSGS总结(BSGS,map)
蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...
- new 经典基础模板总结
NOIP-NOI-ZJOI基础模板总结 目录 C++语言和STL库操作 重载运算符操作 /* 重载运算符 格式 如重载小于号 这里是以x递减为第一关键字比较,y递减为第二关键字比较 */ bool o ...
- [note]BSGS & exBSGS
BSGS (感觉这东西还是要写一下) BSGS主要用于求解形如\(x^k=y\pmod p\)(注意这里p与x互质)这样的方程的最小正整数解的问题 设\(m=\lceil\sqrt p\rceil,k ...
- 大步小步法(BSGS) 学习笔记
\(\\\) BSGS 用于求解关于 \(x\) 的方程: \[ a^x\equiv b\pmod p\ ,\ (p,a)=1 \] 一般求解的是模意义下的指数,也就是最小非负整数解. \(\\\) ...
- BSGS算法(大小步算法)
$BSGS$ 算法 $Baby\ Steps\ Giant\ Steps$. 致力于解决给定两个互质的数 $a,\ p$ 求一个最小的非负整数 $x$ 使得 $a^x\equiv b(mod\ p)$ ...
随机推荐
- 关于表格合并span-method方法的补充(表格数据由后台动态返回)
之前写了一些关于element-ui表格合并的方法,不过用的数据都是确定的数据(死数据),但是很多时候我们的数据都是通过后台获得的,数据不稳定,这个时候使用表格合并就需要先处理一下数据,先看一下一种很 ...
- python 计数器Counter
from collections import Counter colours=( ('Yasoob','Yellow',1), ('Ali','Blue',2), ('Arham','Green', ...
- git修改密码
1.Windows10下更换Git用户名或密码 https://jingyan.baidu.com/article/642c9d3435a6e9644a46f732.html
- poi读取excel2010
package com.icss.test; import java.io.FileInputStream;import java.io.InputStream;import java.util.Ar ...
- Oracle RAC集群添加节点
一,节点环境 所有节点分发/etc/hosts,这里我添加两个节点,一个是上次删除的节点,另一个是什么都没有的节点,尝试添加 服务器介绍什么的都在这hosts文件了,大家自己琢磨下 [grid@nod ...
- Windows与Unix思想
Unix与Windows的思想 Unix中的哲学是"一切皆文件",这里的一切皆文件是一个广泛的概念,有一些特殊的设备文件,在/dev目录下 物理设备在Unix中就对应一个特殊的设备 ...
- Java入门系列-08-选择结构
这篇文章为你搞懂2个问题 if-else选择结构的使用? switch 的使用? 前面我们学习的代码都是直上直下的执行,还不会"拐弯",这篇文章带大家来看一下会"拐弯&q ...
- nyoj 10——skiing————————【记忆化搜索】
skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...
- 引用SQLHelper类configurationmanager 不存在
在使用Sqlhelper类时,出现cs0103错误 当前上下文中不存在名称configurationmanager 解决方案,除了using引用using System.Configuration外, ...
- webview中播放视屏,返回或者退出后,仍然会有声音。
解决办法: protected void onPause() { super.onPause(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODE ...