博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BSGS][哈希]luogu P3846 可爱的质数
阅读量:5200 次
发布时间:2019-06-13

本文共 922 字,大约阅读时间需要 3 分钟。

https://www.luogu.org/problem/P3846

分析

BSGS算法,用于解决求离散对数的问题(拔山盖世(确信))

题目要求$B^L\equiv N (mod p)$

那么我们把形式写成这样:

$B^{im-j}\equiv N (mod p)$

其中$m=\left \lceil \sqrt{p} \right \rceil$

然后显然可以写成

$B^{im}\equiv NB^j (mod p)$

显然i的取值是从1~m的,j的取值是从0~m的

我们将所有$NB^J mod p$的取值算出来,用哈希储存j

然后再枚举im,寻找相等的即可

 

#include 
#include
#include
using namespace std;const int Q=12255871;struct Hash { int val,id;}h[Q];int P,B,N,n;int Pow(int x,long long y) {
int ans=1;for (;y;y>>=1,x=1ll*x*x%P) if (y&1) ans=1ll*ans*x%P;return ans;}void Insert(int x) { int val=1ll*N*Pow(B,x)%P,i=val%Q; while (h[i].val!=val&&h[i].id>-1) i=(i+1)%Q; h[i].val=val,h[i].id=x;}int Search(long long x) { int val=Pow(B,x),i=val%Q; while (h[i].val!=val&&h[i].id>-1) i=(i+1)%Q; return h[i].id;}int main() { for (int i=0;i
View Code

 

转载于:https://www.cnblogs.com/mastervan/p/11380830.html

你可能感兴趣的文章
Java自定义范型的应用技巧
查看>>
[洛谷1485] 火枪打怪
查看>>
白话经典算法系列之六 快速排序 快速搞定
查看>>
错了:用流量能够放肆,有wifi则要节制
查看>>
CSS渐变字体、镂空字体、input框提示信息颜色、给图片加上内阴影、3/4圆
查看>>
https://zhidao.baidu.com/question/362784520674844572.html
查看>>
第八周
查看>>
my.cnf_For5.7_注释版
查看>>
【MFC 学习笔记】CFile读写文件
查看>>
Java 的IO操作初步(一)
查看>>
关于VGA时序的相应计算方式
查看>>
电感和感抗
查看>>
PAT B1018.锤子剪刀布(20)
查看>>
Yii2.0 集成使用富头像上传编辑器
查看>>
Extjs控件之 grid打印功能
查看>>
检测多个Jar包冲突的class
查看>>
枚举类型(不常用)递归
查看>>
iOS开发基础篇-transform属性
查看>>
ETL
查看>>
Tomcat源码分析(六)--日志记录器和国际化
查看>>