POJ 2417 baby_step giant_step 小步大步算法 a^x == b(mod n) 求解0<=x<n的值

Shank大步小步算法 Shank大步小步算法用来求解a^x=b(mod N) 阅读详情

题目照片:http://poj.org/problem?id=2417

题意:求解a^x==b(mod n),==表示同余的意思。

解法:大步小步算法裸题,我也不懂这个算法,先存个模板,应该有用。 复杂度是O(sqrt(n)*log(n))的

///POJ 2417

#include <stdio.h>
#include <cmath>
#include <string.h>
#include <stdlib.h>
#include <iostream>
typedef long long LL;
#define MOD 76543
int hs[MOD], head[MOD], nxt[MOD], id[MOD], top;
void insert(int x, int y){
    int k=x%MOD;
    hs[top]=x, id[top]=y, nxt[top]=head[k], head[k]=top++;
}
int find(int x){
    int k=x%MOD;
    for(int i=head[k];~i;i=nxt[i]){
        if(hs[i]==x){
            return id[i];
        }
    }
    return -1;
}
int BSGS(int a, int b, int n){
    memset(head,-1,sizeof(head));
    top=1;
    if(b==1) return 0;
    int m=sqrt(n*1.0), j;
    long long x=1,p=1;
    for(int i=0; i<m; ++i, p=p*a%n) insert(p*b%n,i);
    for(long long i=m; ; i+=m){
        if((j=find(x=x*p%n))!=-1) return i-j;
        if(i>n) break;
    }
    return -1;
}

int main(){
    int a, b, n;;
    while(~scanf("%d%d%d",&n,&a,&b)){
        int ans=BSGS(a,b,n);
        if(ans==-1) printf("no solution\n");
        else printf("%d\n", ans);
    }
    return 0;
}
BSGS大步小步算法 BSGS大步小步算法 BSGS(Baby Step Giant Step)应该叫小步大步算法(北上广深算法) 该算法用于解决例如: ax≡b(mod p) a^x \equiv b (mod\ p)ax≡b(mod p) 类似这种式子也称为同余方程,或者叫做离散对数的问题。很容易想到,BSGS算法也可以用于求log。在同余问题中我们往往关注最小正整数解。 解法如下 先考虑无解,当gcd(a,b)≢1gcd(a,b) \not\equiv1gcd(a,b)​≡1时肯定无解,因此常常保证 阅读详情

相关推荐

2.7 离散对数-小步大步算法

讲述了求离散对数的小步大步算法,给出了python实现。 2025年12月20日,加上了复杂度分析。

你的指尖有改变世界的力量 3450

算法练习之快速模幂的应用

题目详情 请求出方程(x^k) mod n =0在1<=x<=n的情况下解的个数。(x^k表示x的k次方,mod表示取余操作) 用例 输入 两个正整数n,k(1<=n,k<=100000)。 输出 解的个数。 9 2 3 code #include <stdio.h> #include <stdlib.h> #include <string.h> long long powermod(long long x, long long y, long l

kaikai_sk的博客 817

银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例

文章目录1.软加解密示例2.知识点①ANSI X9.8 格式标准②主密钥,工作密钥加解密基本概念:加密种类:3.密码键盘操作4.工具 1.软加解密示例 ————————————————————————————————————————————------ 已知数据: 银行测试主密钥TMK: 1234567890ABCDEFABCDEF0987654321 通过签到接口得到: 工作密钥密文KeyVal...

老孟嘚吧嘚 6651

大步小步法

大步小步算法(baby step giant step,BSGS),是一种用来求解离散对数(即模意义下对数)的算法,即给出ax≡bmodm中abm的值(这里保证a和m互质),求解x。实际上,大步小步算法就是对暴力枚举的一个简单的改进,使用了类似的思想。我们把x拆成At−B,拆分成这种形式是为了后面移项后指数上能是正的,然后原式就可以化为aAt−B≡bmodm,即aAt≡baBmodm。对于这个式子,如果我们固定一个t值的话,随着B。

永远相信美好的事情即将发生 1423

Field-Oriented Control (FOC) 矢量控制 磁场定向控制

Field-Oriented Control (FOC) 磁场定向控制(FOC),也称为矢量控制,是一种用于控制永磁同步电动机(PMSM)和交流感应电动机(ACIM)的技术。 FOC在整个扭矩和速度范围内都具有良好的控制能力。 FOC的实现需要将定子电流从固定参考系转换为转子磁通参考系(也称为d-q参考系)。 速度控制和转矩控制是FOC最常用的控制模式。位置控制模式不太常见。大多数牵引应用使用转矩控制模式,在该模式下,电动机控制系统遵循参考转矩值。在速度控制模式下,电机控制器遵循参考速度值,并生成用于形成内

>>> 1万+

淘宝链接跳转微信全攻略:自建合规中转页实现私域引流

在跨平台运营中,链接跳转是连接不同生态、实现流量引导的关键技术。其核心原理是通过服务器端或前端逻辑,将用户从一个平台的链接安全引导至目标页面,同时规避平台间的访问限制。这项技术的核心价值在于打破数据孤岛,实现跨平台用户沉淀与精细化运营,广泛应用于电商引流、私域流量构建和跨平台营销等场景。本文聚焦于**淘宝短链**与**企业微信**之间的跳转难题,提供了一套基于自建中转页面的完整工程解决方案,手把手教你如何通过合规的技术手段,将淘宝流量高效、安全地引导至微信生态,并实现数据追踪与客户分流。

weixin_34185512的博客 409

计算器——大步小步算法(BSGS)

目录 一.什么是大步小步算法(BSGS) 二.模板 三.进阶例题:计算机 1.题目 2.题解 3.代码 谢谢! 一.什么是大步小步算法(BSGS) 已知a,b,p,求x。 形如这样的同余式问题,可以用大步小步算法解决:直接将所有存入map,再用来对拍,找到合法的m和k,最后。 证明: 设,那么原式可变为 又可变为 二.模板 出自一道模板题: Discrete...

weixin_43908980的博客 1518

Simulink仿真模块 -Scope

如果您将 Scope 模块放在具有锁定链接的库或者锁定的库中,当尝试打开示波器窗口时,Simulink 会显示错误。要显示某个库模块中的内部数据,请为库模块添加一个输出端口,然后将此端口连接到您模型中的 Scope 模块。当您在示波器内可视化多个基于帧的信号时,部分帧大小为 1 的信号采样可能不会显示。当在示波器内可视化多个基于帧的信号时,部分帧大小为 1 的信号采样可能不会显示。如果在仿真开始时波形视图关闭,则当在仿真后打开波形视图时,波形视图将显示附加的输入信号的仿真结果。

jk_101的博客 3788

小步大步算法(BSGS)求解离散对数问题

小步大步算法(BSGS)求解离散对数问题 众所周知,离散对数问题(Discrete Logarithm Problem,DLP)一直被认为是困难问题。离散对数问题可以是基于循环群的,也可以是基于椭圆曲线的,本篇以循环群上的离散对数问题为例。主要描述的是这样一个问题: DLP问题 求解同余方程 Ax≡B(modP) A^{x}\equiv B \pmod{P} Ax≡B(modP) 其中,PPP是大素数。 如果是在整数上,求对数就可以解决。但是在循环群上,离散对数求解却是难之又难。 问题分析和算法主要思想 根

国科大网安二班的博客 3845

C++ Qt6 qml CMakeLists.txt如何添加qrc文件

本文介绍了在Qt6项目中如何通过CMake管理QML图片资源。相比Qt5的qmake,CMake需要手动创建qrc文件并配置CMakeLists.txt。关键步骤包括:1)创建resources.qrc文件并添加图片资源;2)在CMakeLists.txt中设置CMAKE_AUTORCC为ON开启自动资源处理;3)使用qt_add_resources将qrc文件绑定到项目。配置完成后,可通过"qrc:alias"方式引用资源图片,解决了相对路径管理复杂的问题。

琅嬛福地 1453

MATLAB库函数unwrap(相位解卷绕)的C语言实现

什么是相位解卷绕 Q = unwrap(P) Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a matrix, unw

业精于勤,荒于嬉 4247

bsgs模板

hash //POJ 2417 //baby_step giant_step // a^x = b (mod n) n为素数,a,b < n // 求解上式 0 <= x < n的解 #include <cmath> #include <cstdio> #include <cstring> #define MOD 76543 using namespace std; int hs[MOD], head[MOD], next[MOD], id[MOD],

Sankkl1的博客 250

把静态前端托管进 SAP BTP:HTML5 Application Deployer 与企业级内容部署全攻略

本文介绍了在SAP BTP Cloud Foundry环境中使用HTML5 Application Repository托管前端静态资源的工程化实践。通过HTML5 Application Deployer工具,结合MTA描述、路由配置和服务实例,实现前后端解耦和标准化部署。文章详细阐述了目录结构、关键配置文件、MTA编排以及构建部署流程,并针对大体积前端资源提供了GACD和异步上传两种解决方案。最后说明了如何与AppRouter协同工作,使部署内容可供终端用户访问。这套方法使前端更新无需重启后端,支持团队

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 154

【数论】BSGS算法(大步小步算法)

本篇介绍数论中的 bsgs 算法,包括算法引入、算法过程、算法模板、简单例题及详解

Wmiracle的博客 1万+

【ARM CoreLink 系列 3 -- CCI-550 控制器介绍 】

Arm CoreLink CCI-550 Cache Coherent Interconnect 扩展了 CoreLink CCI-500。它在 big.LITTLE 处理器集群之间提供完整的缓存一致性,并为其他代理(如 Mali GPU、网络接口或加速器)提供 I/O 一致性。CoreLink CCI-550 提供可扩展和可配置的互连,使 SoC 设计人员能够以尽可能小的面积和功耗满足性能目标,并且还增加了可降低整体系统延迟的监听滤波器。

CodingCos的博客 2210

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

算法篇(持续更新ing)

算法1:(用比较计数对数组进行排序) ComparisonCoutingSort(A[0....n-1]) //用比较计数对数组进行排序 //输入:可排序数组A[0...n-1] //输出:数组S[0...n-1],A的元素在其中按照非降序排序 伪代码: for i←0 to n-1 do Count[i]←0 for i←0 to n-2 do for j←i+1 ...

GOGOGO! 447

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

x^a=b(mod c)求解x在[0,c-1]上解的个数模板+原根求法

/************************************* 求解x^a=b(mod c) x在[0,c-1]上解的个数模板 输入:1e9&gt;=a,b&gt;=1,1e9&gt;=c&gt;=3. 返回:调用xaeqbmodc(a,b,c),返回解的个数 复杂度: 找原根的复杂度很低,所以总的复杂度为O(c^0.5) ******************...

weixin_33726313的博客 318

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大步小步攻击算法_完全版

先膜拜一下AekdyCoin大神....可以看看他的空间,有详细的讲解 不错的大步小步算法,可以秒掉poj_2417, poj_3243这种题

Confidence的专栏 3627

大步小步算法

大步小步算法 求a^x=b(modc)中x的最小值 博客1 博客2

qq_41304844的博客 794

大步小步算法(求解离散对数)

baby step giant step简称为大步小步算法,是一个用来求解离散对数的方法,设a的b次对m取模得b,a与m互质时我们令x=At-B,a的At次等于b*a的B次,之后先对右边的数进行存储,,哈希map速度快一点,之后再从左边找,有则返回值,这是一种类似于meet In the middle 的算法,不难验证我们取t为sqrt(fi(m))则可以搜索到所有数值,为了避免算欧拉函数我们令t=sqrt(m), 扩展大步小步算法,当a与m不互质时,我们把式子写成a*a的x-1次+mn=b,同除d若

qq_50812688的博客 1473

算法导论第三版习题32-1

题目: 答案:

liubo279920658的博客 4005

LA 7457 Discrete Logarithm Problem(shank的大步小布算法)

题意:求a^x % p = b的最小x。 #include #include #include #include #include #include #include #include #include #include #include #include #include #define INF 0x3f3f3f3f #define eps 1e-9 #define MAXN 10

WZJRJ28 858

算法导论 习题 10.1

10.1-1:  栈操作先进后出,所以最后结果是: 4  1 10.1-2:  假设数组为A[1,2,3,...,n-1,n]. 可以把两个栈的头部分别放在A的开头和A的末尾,初始化时,top[S1] = 1, top[S2] = n; S1入栈时top[S1]++, S2入栈时top[S2]--, 每次插入时判断如果top[S1]

到处是小雪的白色世界 577

POJ 2417 Discrete Logging (Baby-Step Giant-Step)

Discrete Logging Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2819   Accepted: 1386 Description Given a prime P, 2 &lt;= P &lt; 231, an integer B, 2...

weixin_33698823的博客 225

小步大步算法,循环(Transform,玲珑杯 Round#5 F lonlife 1061)

一看到这道题就想到了   LA 3510  想用大白书上关于置换和循环的部分来解决。然后n太大了1e5,还是三维的,铁定超时。。。 但是这道题目的特点就是对于每一个点的转移方式都是相同的,换句话说就是一个相同的转移矩阵就可以应付所有的坐标。但是具体循环节是多少,还和具体的坐标有关,比如(0,0,0)的循环节就是1,等等。显然答案就是所有循环节的最小公倍数嘛。但死找循环节要超时的啊,我们只能另谋出

xl2015190026的博客 699

BSGS(大步小步) 算法 学习小记

问题 以下方程 xy≡z(modp) x^y \equiv z\pmod{p} xy≡z(modp) 已知xxx,zzz求yyy 解法 根据费马小定理有aϕ(p)≡1(modm)a^{\phi(p)} \equiv 1\pmod{m}aϕ(p)≡1(modm) 所以答案上界是ϕ(p)\phi(p)ϕ(p) 令m=ϕ(p)m=\sqrt {\phi(p)}m=ϕ(p)​ 那么假设y=am+by=a...

Jacky35 449
上一篇: BZOJ 1419: Red is good 期望DP
下一篇: BZOJ 1426: 收集邮票 期望DP,数学推导
just_sort
博客等级 码龄11年 2356粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值