首页 > 其他分享 >BSGS学习笔记

BSGS学习笔记

时间:2023-01-03 20:45:20浏览次数:37  
标签:int ak 笔记 学习 sqrt quad equiv BSGS

对于一个式子

\(\quad\quad at\equiv b (mod\ p)\)

我们可以用扩展欧几里得算法求解

而对于这个式子

\(\quad\quad a^t\equiv b (mod\ p), (a,p)=1\)

我们就要用\(BSGS\)求解了

根据欧拉定理

\(\quad\quad (a,p)=1\rightarrow a^{\phi(p)}\equiv 1(mod\ p)\)

由此我们可以把\([0,\phi(p)-1]\)分块,但是因为\(\phi(p)\)难求,为了代码简单,我们可以在\([0,p]\)间分块,分成\(\sqrt{p}块\), 长度\(k=[\sqrt{p}]+1\)

设\(t=kx-y, x\in [1,k], y\in [0, k-1]\)
则\(t\in [1,k^2]\),然后特判\(t=0\),即可枚举所有。

为什么用减法? 可以移项。

为什么\(x\)不从\(0\)开始? \(BSGS\)一般求的是最小的\(t\), 如果x取零,\(t\)有可能小于零,增加式子的不确定性。

如何快速判断是否符合条件? 每次对于每个固定的\(x\),判断是否存在一个\(y\)符合条件 —— 哈希表.

code

int bsgs(int a, int b, int p)
{
    if (1 % p == b % p) return 0;
    int k = sqrt(p) + 1;
    unordered_map<int, int> hash;
    for (int i = 0, j = b % p; i < k; i ++ )
    {
        hash[j] = i;
        j = (LL)j * a % p;
    }
    int ak = 1;
    for (int i = 0; i < k; i ++ ) ak = (LL)ak * a % p;

    for (int i = 1, j = ak; i <= k; i ++ )
    {
        if (hash.count(j)) return (LL)i * k - hash[j];
        j = (LL)j * ak % p;
    }
    return -1;
}

标签:int,ak,笔记,学习,sqrt,quad,equiv,BSGS
From: https://www.cnblogs.com/sunruize/p/17023331.html

相关文章

  • 学习记录-Spring Boot Admin 监控应用
    SpringBootAdminSpringBootActuator提供了各种端点,SpringBootAdmin能够将Actuator中的信息进行界面化的展示,并提供实时报警功能。在微服务环境中,使用SpringB......
  • C语言学习第三天(while循环)
    1、while语句while(表达式)      循环语句:例题:打印1-10:#include<stdio.h>intmain(){inti=1;while(i<=10){printf("%d\n",i);i++;}retu......
  • [深度学习] 基于切片辅助超推理库SAHI优化小目标识别
    对象检测是迄今为止计算机视觉中最重要的应用领域。然而,小物体的检测和大图像的推理仍然是实际使用中的主要问题,这是因为小目标物体有效特征少,覆盖范围少。小目标物体的定......
  • 性能测试技术笔记(二):如何准备测试环境和数据
    这篇文章,继续分享工作笔记中关于性能测试的内容。上一篇文章聊了如何快速上手压测工作的几个切入点和注意事项,这些内容可以帮助我们更快的介入项目。但实际工作中,前期的......
  • 爬虫笔记【2】如何在爬虫中进行HTTP Basic Authentication所适合的用户名和密码认证?
       登陆网页前遇到的要求输入用户名和密码的程序,通常称为身份认证程序。HTTP认证可以保护一个作用域(成为一个realm)内的资源不受非法访问。当一个请求要......
  • 爬虫笔记【1】如何爬取无HTTPS证书的网站?
      在爬虫过程中遇到很多网页都多多少少会存在证书过期的情况,那么证书过期后,该网站会被认定为不安全网站,那么怎么进行正常的数据爬取呢?  主要从爬虫过程中常遇到的三个......
  • [概率论与数理统计]笔记:
    第二章随机变量的分布与数字特征2.1随机变量及其分布随机变量的概念定义定义在概念空间\((\Omega,P)\)上,取值为实数的函数\(X=X(\omega)(\omega\in\Omega)\)称为\((......
  • MAUI Blazor学习3-绘制ECharts图表
    MAUIBlazor学习3-绘制ECharts图表 MAUIBlazor系列目录 MAUIBlazor学习1-移动客户端Shell布局-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习2-创建移动......
  • 我的python爬虫学习之旅(1)
    在今年9月份的时候,我开始学习爬虫,在此之前我从来没有整理过自己python的基础知识,对文件的操作算不上娴熟,在大佬的指点下我开始对以往的基础知识进行整理,刚开始我觉的比较麻......
  • 高等数学考点笔记
    Date:2023-01-0318:02:50考点:无穷小的比较1.无穷小阶的概念若\(\alpha,\beta\)在同一过程下的无穷小\(若\lim\frac{\alpha}{\beta}=0,则称\alpha是比\beta高阶的......