【[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)$ ...
随机推荐
- 踩坑--http返回码之302状态码
项目介绍:springboot+shiro+maven 业务需求:拦截一切不登录的盗链URL,除了问卷调查,可以给任意用户填写和提交意外. 问题重现:表单提交过程中返回302状态码,我就觉得很奇怪.在 ...
- Tomcat服务器安装
Tomcat服务器类似于XAMPP,主要安装步骤如下. 第一步: 安装JDK. 第二步: 安装tomcat. 第三步: 启动tomcat下bin下的startup.bat即可启动tomcat. 可能出 ...
- 第十九章:UTC time和local time的互换
通常我们服务器端的时间使用UTC格式,避免服务器的时区对最终的时间产生影响.而客户端需要根据具体的时区显示local time,本文将介绍如何将服务器的UTC time(基于asp.net web a ...
- 04-struts2获得参数
1 struts2 获得参数 1-属性驱动获得参数 1 Demo8Action package www.test.c_param; import java.util.Date; import com. ...
- Basic Data Structures and Algorithms in the Linux Kernel--reference
http://luisbg.blogalia.com/historias/74062 Thanks to Vijay D'Silva's brilliant answer in cstheory.st ...
- js 添加HTML属性的方法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Java版多人聊天室
server.java import java.io.*; import java.net.*; import java.text.SimpleDateFormat; import java.util ...
- [LeetCode]29. Divide Two Integers两数相除
Given two integers dividend and divisor, divide two integers without using multiplication, division ...
- hdu 3255 体积并
http://www.cnblogs.com/kane0526/archive/2013/03/07/2948446.html http://blog.csdn.net/acdreamers/arti ...
- Django——model进阶(待完成)
https://www.cnblogs.com/yuanchenqi/articles/7570003.html 一.QuerySet 1.可切片 使用Python 的切片语法来限制查询集记录的数目 ...