zoukankan      html  css  js  c++  java
  • 「数学」快速幂

    原理

    [a^n=egin{matrix} underbrace{ a*a*…*a } \ n end{matrix}\ a^{13}=a^{(1101)_2}=a^8*a^4*a^1 ]

    应用

    矩阵快速幂和多次置换

    计算斐波那契数列可以构建(2*2)的转移矩阵从(F_i,F_{i+1})(F_{i+1},F_{i+2})的变换,将转移矩阵用快速幂优化到(n^3logk)

    把序列置换(k)次,将置换快速幂自乘(k)

    加速线性变换

    三维空间中

    [egin{bmatrix}1 & 0 & 0 & a \0 & 1 & 0 & b \0 & 0 & 1 & c \0 & 0 & 0 & 1end{bmatrix}*egin{bmatrix}x\y\z\1end{bmatrix}=*egin{bmatrix}x'\y'\z'\1end{bmatrix} ]

    (x)(a)(y)(b)(z)(c)

    [egin{bmatrix} a & 0 & 0 & 0 \ 0 & b & 0 & 0 \ 0 & 0 & d & 0 \ 0 & 0 & 0 & 1end{bmatrix} ]

    (x)放大(a)倍,(y)放大(b)倍,(z)放大(c)

    [egin{bmatrix} 1 & 0 & 0 & 0 \ 0 & cos heta & sin heta & 0 \ 0 & -sin heta & cos heta & 0 \ 0 & 0 & 0 & 1end{bmatrix} ]

    (x)轴旋转( heta)

    模意义下大整数乘法

    龟速乘:将乘法拆分成二进制加放放置爆long long

    快速乘:

    [a*b mod m=a*b-lfloorfrac{ab}{m} floor*m ]

    利用(unsigned long long)的自然溢出,减法前后两部分都自然溢出,差值不变

    [a*b mod m=a*b-lfloorfrac{ab}{m} floor*m=(a*b-lfloorfrac{ab}{m} floor*m) mod 2^{64} ]

    对于(lfloorfrac{ab}{m} floor)可以用(long double)

    因为浮点数误差,运算结果应该返回((ret+m) mod m)

    快速乘的一点转化:

    当模数小于(10^{12})

    [x*y mod P\ A=(x*(y>>25))\% P*(1<<25)\%P\ B=(x*(y&((1<<25)-1))\%P\ x*y mod P=(A+B) mod P ]

    利用分配律可以完全做到(O(1))

    光速幂

    要求同一底数,同一模数,(O(sqrt{n}))预处理,(O(1))查询

    选定一个数(s),预处理出(a^0)(a^s)(a^{0*s})(a^{lceilfrac{p}{s} ceil})

    每次询问(a^b mod p),将(b)拆分为(lfloorfrac{b}{s} floor*s+b mod s),则(a^b=a^{lfloorfrac{b}{s} floor*s}*a^{b mod s})

    (s)选择(sqrt{p})可以做到根号平衡,选择合适大小的(2)的次幂可以位运算优化

  • 相关阅读:
    Tsar 服务器系统和应用信息的采集报告工具
    mysqltuner
    MySQL性能监控工具-MONyog
    tuning-primer.sh mysql 报表
    mytop
    InnoTop
    mysql监控管理工具--innotop
    iotop,pt-ioprofile : mysql IO负载高的来源定位
    PERCONA-TOOLKIT 工具的安装与使用2
    PERCONA-TOOLKIT : pt-ioprofile分析IO情况
  • 原文地址:https://www.cnblogs.com/knife-rose/p/15321940.html
Copyright © 2011-2022 走看看