#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代码简叙的更多相关文章

  1. HTML代码简写法:Emmet和Haml

    http://www.ruanyifeng.com/blog/2013/06/emmet_and_haml.html?bsh_bid=657901854 HTML代码简写法:Emmet和Haml   ...

  2. c#字符串加载wpf控件模板代码 - 简书

    原文:c#字符串加载wpf控件模板代码 - 简书 ResourceManager resManagerA = new ResourceManager("cn.qssq666.Properti ...

  3. OpenStack之虚机冷迁移代码简析

    OpenStack之虚机冷迁移代码简析 前不久我们看了openstack的热迁移代码,并进行了简单的分析.真的,很简单的分析.现在天气凉了,为了应时令,再简析下虚机冷迁移的代码. 还是老样子,前端的H ...

  4. WinForm 自动完成控件实例代码简析

    在Web的应用方面有js的插件实现自动完成(或叫智能提示)功能,但在WinForm窗体应用方面就没那么好了. TextBox控件本身是提供了一个自动提示功能,只要用上这三个属性: AutoComple ...

  5. HTML代码简写法:Emmet和Haml(转)

    HTML代码写起来很费事,因为它的标签多. 一种解决方法是采用模板, 在别人写好的骨架内,填入自己的内容.还有一种就是我今天想要介绍的方法----简写法. 常用的简写法,目前主要是Emmet和Haml ...

  6. C#学习笔记(1) --简叙.net体系结构

    1 C#与.NET的关系 (1) C#是专门为与Microsoft的.Net Framework一起使用而设计的. (2) C#是一种基于面向对象设计方法的的语言. (3) 需要注意的是,C#就其本身 ...

  7. php反序列化简叙

    0x01 php简单的反序列化 这题是在网上看到的,原题连接不太了解,但是源码题目给了出来,稍微下文件名和排版在本地测试 <?php class SoFun{ protected $file=' ...

  8. Log4js 工作原理及代码简析

    本文地址 http://www.cnblogs.com/jasonxuli/p/6518650.html   log4js   版本 0.6.16, 最新版1.1.1 大体类似.   使用 log4j ...

  9. 39、请用代码简答实现stack

    栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 PS:stack和queue是不能通过查询具体某一个位置的元素而进行操作的.但是他们的排列 ...

  10. uboot 2013.01 代码简析(3)第二阶段初始化

    u-boot第二阶段初始化内容的入口函数是_main,_main位于arch/arm/lib/crt0.S文件中: _main函数中先为调用board_init_f准备初始化环境(设置栈指针sp和并给 ...

随机推荐

  1. 推荐一个Elasticsearch ES可视化客户端工具:ES-King

    ES-King:开源免费,一个现代.实用的ES GUI客户端,支持多平台. 下载地址:https://github.com/Bronya0/ES-King 功能清单 详尽的集群信息:节点信息.堆内存占 ...

  2. 「硬核科普」C++11锁机制三兄弟大比拼:mutex、lock_guard与unique_lock

    大家好啊,我是小康.今天咱们聊点"家常"--那些让C++程序员又爱又恨的多线程同步工具! 如果你曾经被多线程搞得头大,或者听到"死锁"就心慌,那这篇文章就是为你 ...

  3. C# 获取磁盘或硬盘信息的坑,存在未就绪(IsReady = false)导致异常的问题

    最近测试组小伙伴在用外接扩展坞链接有线网络,发现好几个程序在获取磁盘信息的时候都直接报错.这让我很奇怪,拉取了现场的日志. 由于这个模块的代码已经很稳定,好久没修改过了,之前一直测试都没有问题的,然后 ...

  4. 我的Vue之旅(1)

    2020-10-17 今天主要学习了Vue中以下几个指令的使用 v-bind v-if v-on v-for v-model 其中v-bind与v-model都是属于数据绑定,v-bind通常来说是绑 ...

  5. PHP代码学习

    在php传参过程中,如果服务器运行的Linux环境,可以加入命令的执行,比如参数名是a,命令可以是:a=ls,通过用:,&&,|| 来分割,还可以同时执行多个命令.在Windows环境 ...

  6. MyBatis常见面试题:Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

      MyBatis常见面试题:通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?   Dao接口即Mapper接 ...

  7. CommonJS、ES 导出和导入模块

    以下代码制作展示,不能直接运行. CommonJS导出 // module.cjs // CJS默认导出 //module.exports = 'Hello world'; /*module.expo ...

  8. java等比压缩图片工具类

    工具类 package com.chinaums.abp.util; import javax.imageio.ImageIO; import java.awt.*; import java.awt. ...

  9. linux(Ubuntu22.04)二进制安装mysql及redis

    安装MySQL 1.下载mysql安装包 https://downloads.mysql.com/archives/community/ 解压压缩包 tar xf mysql-8.0.30-linux ...

  10. Web前端入门第 73 问:JavaScript DOM 常用事件那点小事

    网页上各种炫酷的交互效果离不开各种 DOM 事件 的支持,在写这篇文章之前,一度以为 JS 的事件绑定/取消方式就我知道的那几种,翻阅文档之后才发现,知识面还是有待提升,多翻翻文档,就像发现新大陆一样 ...