BSGS算法学习
嗯哼大步小步法。
一个非常暴力的想法.
注意到如果设C = ⌈√P⌉,那么任何一个数都可以写
成a1 * C + b1的形式,其中a1, b1 都< C.
那么预处理出A^i*C的值.然后在询问时枚举b1.
A^a1*C-b1 = B,A^a1*C = B * A^b1.
把A^b1乘一下,再去hash表里查找是否有对应的值即可.
复杂度为O(√P)
//POJ 2417
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<map>
#include<cmath>
using namespace std;
typedef long long ll;
map<ll,int>mmp;
int qmod(ll a,ll b,ll p)
{
ll ans=;
while(b)
{
if(b&)ans=ans*a%p;
a=a*a%p;b>>=;
}
return ans;
}
int main()
{
ll p,a,b;
while(~scanf("%lld%lld%lld",&p,&a,&b))
{
mmp.clear();
if(a%p==)
{
puts("no solution");
continue;
}
bool flag=;
ll ans=;
int c=ceil(sqrt(p));
for(int i=;i<=c;++i)
{
if(i==)
{
ans=b%p;mmp[ans]=i;continue;
}
ans=ans*a%p;
mmp[ans]=i;
}
ll tmp=qmod(a,c,p);ans=;
for(int i=;i<=c;++i)
{
ans=ans*tmp%p;
if(mmp[ans])
{
tmp=i*c-mmp[ans];
printf("%d\n",(tmp%p+p)%p);
flag=;
break;
}
}
if(!flag)puts("no solution");
}
return ;
}
BSGS算法学习的更多相关文章
- BSGS算法学习笔记
从这里开始 离散对数和BSGS算法 扩展BSGS算法 离散对数和BSGS算法 设$x$是最小的非负整数使得$a^{x}\equiv b\ \ \ \pmod{m}$,则$x$是$b$以$a$为底的离散 ...
- bzoj2242: [SDOI2011]计算器 && BSGS 算法
BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (m ...
- 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法
BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...
- DSP算法学习-过采样技术
DSP算法学习-过采样技术 彭会锋 2015-04-27 23:23:47 参考论文: 1 http://wr.lib.tsinghua.edu.cn/sites/default/files/1207 ...
- 算法学习之C语言基础
算法学习,先熟悉一下C语言哈!!! #include <conio.h> #include<stdio.h> int main(){ printf(+); getch(); ; ...
- Python之路,Day21 - 常用算法学习
Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...
- C / C++算法学习笔记(8)-SHELL排序
原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...
- [BSGS算法]纯水斐波那契数列
学弟在OJ上加了道"非水斐波那契数列",求斐波那契第n项对1,000,000,007取模的值,n<=10^15,随便水过后我决定加一道升级版,说是升级版,其实也没什么变化,只 ...
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
随机推荐
- 对Property进行RACObserve
@property (assign,nonatomic) int price; @property (assign,nonatomic) int time; [RACObserve(self,pric ...
- js判断当前页面是顶级窗口
<script> if(top.location!=self.location){ alert("不是顶层窗口"); }else{ alert("是顶层窗口& ...
- Centos 7和 Centos 6开放查看端口 防火墙关闭打开
Centos 7 firewall 命令: 查看已经开放的端口: firewall-cmd --list-ports 开启端口 firewall-cmd --zone=public --add-por ...
- Dubbo学习笔记10:Dubbo服务消费方启动流程源码分析
同理我们看下服务消费端启动流程时序图: 在<Dubbo整体架构分析>一文中,我们提到服务消费方需要使用ReferenceConfig API来消费服务,具体是调用代码(1)get()方法来 ...
- [机器学习&数据挖掘]SVM---软间隔最大化
根据上个硬间隔最大化已经知道,在解决线性可分数据集的分类问题时,求得拉格朗日乘子.w.b就得到分离超平面,然后就可以进行分类,软间隔最大化是针对非线性可分的数据集,因为并不是数据集在可分的时候会出现一 ...
- PHP-Redis操作
/*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超 ...
- 第13月第16天 ios keywindow
1. 在弹出层弹出后keywindow已改变 http://www.jianshu.com/p/4695d7efa20b
- CF232C Doe Graphs
传送门 Solution: (不理解时对着图研究一下就清楚啦!!!) sm[i]为|D(i)| (x,y,n)为x,y在D(n)中的最短路 已知sm[i-1]+1为D(i)的割点 于是x-y的最短 ...
- CSS font系列
font-family font-family: Verdana,Helvetica,Arial,"Microsoft YaHei",sans-serif; font-family ...
- fuzz for test of the Net::HTTP::GET
use Net::HTTP::GET; % %0e%0f ' *%26 @.jpg>; my $count = 0; for @chars X @chars X @chars X @chars ...