zoukankan      html  css  js  c++  java
  • 数论随笔(updating)

    数论笔记

    BSGS(大步小步法)

    ​ 求解形如(a^x equiv b (mod p))的方程的(x)((gcd(a,b) = 1))

    ​ 令(x = msqrt{p}-n(m,nleq sqrt{p})),那么(a^{msqrt{p}-n}equiv b(mod p)),将两边同乘一个(a^n),可得(a^{msqrt{p}}equiv ba^n(mod p))

    ​ 然后先枚举(n),用哈希表把右边存下来,再枚举(m),看有无能与它同余的(n)值,就可以知道(x)

    ​ 若要求最小解,哈希表中相同哈希值的那一位取(n)的最大值,然后在比较的时候取一下(max)值就好了。

    总结:数论中常用的构造法的一个鲜明的例子,将枚举(p)次构造成两边各枚举(sqrt{p})次,以后数论中要常想到用这种构造法。

    扩展BSGS

    ​ 假如上面的(a,p)不互质该怎么办呢?

    ​ 辣么我们通过不断除去(gcd(a,p)),来使它们变得互质,具体而言:

    ​ 首先求(gcd(a,p)=c_i),然后可以得到(frac{a}{c_i}a^{x-1}equiv frac{b}{c_i}(mod frac{p}{c_i}))

    ​ 然后,(frac{a}{c_i}a^{x-1})(frac{p}{c_i})可能依然不互质,那么我们依葫芦画瓢,再除去一个(gcd(a,frac{p}{c_i}))

    ​ 如果仍然不互质,就一直除到两者互质为止,假设我们除了(k)次,那么我们可得

    (frac{a^k}{prod_{i=1}^{k} c_i}a^{x-k}equiv frac{b}{prod_{i=1}^{k} c_i}(mod frac{p}{prod_{i=1}^{k} c_i}))

    ​ 然后(frac{a^k}{prod_{i=1}^{k} c_i})是个可以算出来的常量,我们把它除到右边去就好了,因为(frac{p}{prod_{i=1}^{k} c_i})(a)互质,所以有逆元,可以除。

    ​ 当然,(x)可能小于(k),我们(O(sqrt{p}))的时间直接枚举看看在小于(k)的范围内有没有解就好了。

  • 相关阅读:
    成长——新的开始,一切都是美好的
    asp.net mvc项目自定义区域
    随便记录下系列
    插件化编程实现的一份糖炒栗子~~
    个人项目框架搭建 -- 缓存接口与实现
    个人项目框架搭建 -- 仓储模式使用
    个人项目框架搭建 -- Autofac简单使用记录
    至自己
    使用T4模板合并js文件
    HTML5学习笔记
  • 原文地址:https://www.cnblogs.com/Illusions/p/14254296.html
Copyright © 2011-2022 走看看