BSGS代码简叙
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e6+7;
const int mod=998244353;
const int INF=0x3f3f3f3f;
/*
BSGS算法 b^l==n%p 求解最小的l
不妨直接把l拆分成i*m-j,这样的话同余方程就变为b^(i*m)==n*b^j%p
直接枚举j属于[0,m) m=ceil///向上取整(sqrt(p)) map记录当前的j的数值
随后枚举i属于[0,m)查询map是否存在j满足且需要满足i*m>j=op[s]
很显然这只是gcd(b,p)=1的情况,此时枚举只到了m-2与费马小定理对应
*/
map<ll,ll>op;
ll p,b,n;
ll quick_pow(ll a,ll b,ll p)
{
ll ans=1;
while (b)
{
if (b&1)///b为奇数
ans=(ans*a)%p;
a=(a*a)%p;///b为偶数
b>>=1;
}
return ans;
}
ll BSGS(ll p,ll b,ll n)
{
ll m=ceil(sqrt(p));
for (ll i=0,s=n;i<m;++i,s=s*1ll*b%p)///枚举的时候map记录位置
{
op[s]=i;
}
for (ll i=0,tmp=quick_pow(b,m,p),s=1ll;i<m;++i,s=s*1ll*tmp%p )///查找j
{
if (op.find(s)!=op.end())
{
if (i*m>=op[s])return i*m-op[s];
}
}
return -1ll;
}
int main()
{
scanf("%lld%lld%lld",&p,&b,&n);///b^l==n%p
ll cnt=BSGS(p,b,n);
cnt==-1ll?cout<<"no solution"<<endl:cout<<cnt<<endl;
return 0;
}
BSGS代码简叙的更多相关文章
- HTML代码简写法:Emmet和Haml
http://www.ruanyifeng.com/blog/2013/06/emmet_and_haml.html?bsh_bid=657901854 HTML代码简写法:Emmet和Haml ...
- c#字符串加载wpf控件模板代码 - 简书
原文:c#字符串加载wpf控件模板代码 - 简书 ResourceManager resManagerA = new ResourceManager("cn.qssq666.Properti ...
- OpenStack之虚机冷迁移代码简析
OpenStack之虚机冷迁移代码简析 前不久我们看了openstack的热迁移代码,并进行了简单的分析.真的,很简单的分析.现在天气凉了,为了应时令,再简析下虚机冷迁移的代码. 还是老样子,前端的H ...
- WinForm 自动完成控件实例代码简析
在Web的应用方面有js的插件实现自动完成(或叫智能提示)功能,但在WinForm窗体应用方面就没那么好了. TextBox控件本身是提供了一个自动提示功能,只要用上这三个属性: AutoComple ...
- HTML代码简写法:Emmet和Haml(转)
HTML代码写起来很费事,因为它的标签多. 一种解决方法是采用模板, 在别人写好的骨架内,填入自己的内容.还有一种就是我今天想要介绍的方法----简写法. 常用的简写法,目前主要是Emmet和Haml ...
- C#学习笔记(1) --简叙.net体系结构
1 C#与.NET的关系 (1) C#是专门为与Microsoft的.Net Framework一起使用而设计的. (2) C#是一种基于面向对象设计方法的的语言. (3) 需要注意的是,C#就其本身 ...
- php反序列化简叙
0x01 php简单的反序列化 这题是在网上看到的,原题连接不太了解,但是源码题目给了出来,稍微下文件名和排版在本地测试 <?php class SoFun{ protected $file=' ...
- Log4js 工作原理及代码简析
本文地址 http://www.cnblogs.com/jasonxuli/p/6518650.html log4js 版本 0.6.16, 最新版1.1.1 大体类似. 使用 log4j ...
- 39、请用代码简答实现stack
栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 PS:stack和queue是不能通过查询具体某一个位置的元素而进行操作的.但是他们的排列 ...
- uboot 2013.01 代码简析(3)第二阶段初始化
u-boot第二阶段初始化内容的入口函数是_main,_main位于arch/arm/lib/crt0.S文件中: _main函数中先为调用board_init_f准备初始化环境(设置栈指针sp和并给 ...
随机推荐
- Python内置库itertools简单学习
该库为满足特定需要的比较高效的迭代器内置库,在数据科学中的应用也不少,故有必要了解一下: import itertools import sys 无限迭代器(Infinite iterators) I ...
- Python标准库学习之logging
前言 在python程序中,出于调试监测或者追踪(track)的目的,一般会在关键的部位加print语句来输出监测的变量值,但对于复杂的程序来讲,这样的调试手段就远远不够了,这也是logging库存在 ...
- DOS命令——带包的类的编译与运行
手动版:a.javac编译当前类文件 b.手动建立与包名对应的文件夹 c.把a步骤中编译出的.class 文件放到b步骤中的最底层文件夹下 ...
- MyBatis常见面试题:#{}和${}的区别是什么?
经常碰到这样的面试题目:#{}和${}的区别是什么? 正确的答案是:#{}是预编译处理,${}是字符串替换. 备注:${}是插值,插值的新认识见:http://www.mybatis.cn ...
- 记录一次自己用 AI 写IOS APP的经历
我是几乎没有移动端开发经验的.仅有的一点安卓开发经验还是十几年前没毕业的时候自己瞎折腾. 故事的起源是每天辅导我儿子功课时的暴跳如雷. 我儿子上一年级了,在语文的生词上落后得非常严重(当然可能是他同学 ...
- python学习思维导图分享
python 本文包含了我的一些python学习的笔记和思维导图 第一部分:python基础 导图下载链接 第二部分:函数及其他文件操作 导图下载链接 第三部分:类及网络编程 导图下载链接 第四部分: ...
- SpringBoot发布webservice服务并调用(hutool yyds)
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 前言 开干 1.涉及技术点 2.整体项目结构 3.Provider 发布Ws服务端 首先,肯定要修改pom文件 依赖加上 3.0 因为用对象的 ...
- linux服务器常用硬件查询操作
查看服务器内存条数 [root@test ~]# dmidecode |grep -P -A5 "Memory\s+Device" |grep Size |grep -v Rang ...
- 看PHP7底层源码与设计 读后感
对PHP的理解 读完这本书以后,发现自己好像不会PHP,自己知识PHP代码的搬运工,对数组的实现,内存管理,生命周期,垃圾回收,面向对象,Zend虚拟机这些知识点,这些都不知道,现在也说不上来,具体的 ...
- CBV添加装饰器
CBV添加装饰器 from django.utils.decorators import method_decorator (1)添加在函数上 class CbvTest(View): @method ...