本质:二进制拆分(你说倍增我也没脾气)。然后是一个配凑。

合起来就是边二进制拆分,边配凑。

快速乘(其实龟速):把乘数二进制拆分。利用乘法分配率。

用途:防止爆long long

代码:

ll qk(ll x,ll y,ll mod){
ll ret=;
while(y){
if(y&) (ret+=x)%=mod;
(x+=x)%=mod;
y>>=;
}
return ret;
}

如果为了卡常,可以写成这样:

ll qk(ll x,ll y,ll mod){
ll ret=;
x%=mod;y%=mod;
while(y){
if(y&) ret=ret+x>=mod?ret+x-mod:ret+x;
x=x+x>=mod?x+x-mod:x+x;
y>>=;
}
return ret;
}

第一行必须有x%=mod,y%=mod,否则开始x,y可能很大,减一次mod不能减到mod以下。

还是错过几次。。。

(有时候卡这个取模还是挺有效的。)

快速幂(真的快速):把指数二进制拆分。利用:a^(x+y)=a^x*a^y

用途:各种指数运算,一般还取模。

推广:矩阵快速幂。

代码略。

快速幂经常与快速乘结合。log^2n也是可以接受的。

例题:

随机数生成器

直接推式子,然后分治求等比数列,爆long long,要快速乘。

复杂度:O(log^3n)

upda:2018.10.12

你以为快速幂就这么简单???
其实可以更有趣一些。

与其说快速幂本质是二进制拆分,不如说是进制拆分。

因为,我们可以10进制快速幂!!!

应用于高精快速幂。

因为/2是O(len)的,除法复杂度太高 。

而如果高精用10进制存储,可以10进制快速幂!!每次干掉低位,类比于二进制下的左移和右移。

复杂度也是logn的。奇技淫巧第24条。

快速幂快吗?很快。但是还是logn的。

如果要多次进行快速幂,那么每次logn的复杂度可能还是不能接受。

我们根据拆分的思想,如果指数在1e9范围内,那么A^k=A^([k/1e4]*1e4+k%1e4)=A^([k/1e4]*1e4)*A^(k%1e4)

可以尝试根号预处理。

[六省联考2017]相逢是问候——欧拉公式+线段树

upda:2019.1.19

延伸一下

分块预处理,可以称之为“光速幂”

然后块速递推

[学习笔记]快速幂&&快速乘的更多相关文章

  1. 「学习笔记」FFT 快速傅里叶变换

    目录 「学习笔记」FFT 快速傅里叶变换 啥是 FFT 呀?它可以干什么? 必备芝士 点值表示 复数 傅立叶正变换 傅里叶逆变换 FFT 的代码实现 还会有的 NTT 和三模数 NTT... 「学习笔 ...

  2. 取模性质,快速幂,快速乘,gcd和最小公倍数

    一.取模运算 取模(取余)运算法则: 1. (a+b)%p=(a%p+b%p)%p; 2.(a-b)%p=(a%p-b%p)%p; 3.(a*b)%p=(a%p * b%p)%p; 4.(a^b)%p ...

  3. HDU 4549 矩阵快速幂+快速幂+欧拉函数

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  4. [学习笔记] 多项式与快速傅里叶变换(FFT)基础

    引入 可能有不少OIer都知道FFT这个神奇的算法, 通过一系列玄学的变化就可以在 $O(nlog(n))$ 的总时间复杂度内计算出两个向量的卷积, 而代码量却非常小. 博主一年半前曾经因COGS的一 ...

  5. ACM:a^b%p-数论-快速幂-快速乘

    a^b Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: Description 求a的b次方,取模mod(1<=a,b ...

  6. BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘

    2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...

  7. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

  8. HDU 5607 graph 矩阵快速幂 + 快速幂

    这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行) ...

  9. 快速幂&快速乘法

    尽管快速幂与快速乘法好像扯不上什么关系,但是东西不是很多,就一起整理到这里吧 快速幂思想就是将ax看作x个a相乘,用now记录当前答案,然后将指数每次除以2,然后将当前答案平方,如果x的2进制最后一位 ...

随机推荐

  1. const与readonly常量

    const与readonly常量 const与readonly都是用来定义常量,但是它们有什么区别呢? 下面我们来简要的说明一下: const修饰的常量是编译时常量,如:public const St ...

  2. 使用JS验证文件类型

    项目中涉及到这一需求,在此贴出代码分享给大家, 有2中方式,一种是input中使用accept 方式 一种是使用js正则表达式判断,个人推荐使用js正则表达式,因为accept 有的浏览器并不支持,而 ...

  3. win7重装系统后设置Python2.7环境

    起因 台式机的主板莫名出现问题,显示器画面卡顿不能动,鼠标键盘无反应,在这种情况下只好按住电源键断电.下面重启后,显示器无画面,猜测开机后没有进BIOS.然后就拆机箱,拔下电源线后撬起主板电池几秒再放 ...

  4. 工作在Amazon:为何晋升如此难?

    英文原文:Why It's So Difficult to Climb Amazon's Corporate Ladder 本文作者 Brad Stone 的新书 The Everything Sto ...

  5. 你用 Python 做过什么有趣的数据挖掘项目?

    有网友在知乎提问:「你用 Python 做过什么有趣的数据挖掘项目?」 我最近刚开始学习 Python, numpy, scipy 等, 想做一些数据方面的项目,但是之前又没有这方面的经验.所以想知道 ...

  6. centos上搭建git服务--3

    前言:当我们想要实现几个小伙伴合作开发同一个项目,或者建立一个资源分享平台的时候,GIT就是一个很好的选择.当然,既然是一个共有平台,那么把这个平台放到个人计算机上明显是不合适的,因此就要在服务器上搭 ...

  7. 经验之谈:10位顶级PHP大师的开发原则

    导读:在Web开发世界里,PHP是最流行的语言之一,从PHP里,你能够很容易的找到你所需的脚本,遗憾的是,很少人会去用“最佳做法”去写一个PHP程序.这里,我们向大家介绍PHP的10种最佳实践,当然, ...

  8. Live Archive 训练题 2019/3/9

    7454 Parentheses A bracket is a punctuation mark, which is used in matched pairs, usually used withi ...

  9. 冲刺ing-6

    第六次Scrum冲刺 队员完成的任务 队员 完成任务 吴伟华 Leangoo的看板截图,燃尽图 蔺皓雯 编写博客,界面设计 蔡晨旸 界面设计 曾茜 测试 鲁婧楠 学习后端设计 杨池宇 界面设计 成员遇 ...

  10. 周总结<5>

    周次 学习时间 新编写代码行数 博客量(篇) 学到知识点 12 10 100 1 路由器的设置(ospf协议):网页设计:哈夫曼树(C语言数构) Html案例: <!DOCTYPE html P ...