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

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

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

用途:防止爆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. scrapy (一)

    scrapy框架 scrapy 是一个爬虫框架,能够高效率,高层次的爬取页面的数据并进行处理. 在scrapy的英文文档中,有这样的一个流程图 scrapy 框架主要分为五大部分,spider, en ...

  2. python3 selenium实现自动登陆网页

    一.  安装python3与pycharm python安装参考链接:https://www.cnblogs.com/hepeilinnow/p/9727922.html pycharm最好安装专业版 ...

  3. SICP读书笔记 1.2

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  4. Elasticsearch.Net 异常:[match] query doesn't support multiple fields, found [field] and [query]

    用Elasticsearch.Net检索数据,报异常: )); ElasticLowLevelClient client = new ElasticLowLevelClient(settings); ...

  5. Redis5.0:现公测全免费,点击就送,注册账号,即开即用

    华为云分布式缓存服务Redis,是华为云服务的一款核心产品. 分布式缓存Redis是一款内存数据库服务,基于双机热备的高可用架构,提供单机.主从.集群等丰富类型的缓存类型. 现推出最新版本Redis5 ...

  6. sqli-labs学习笔记 DAY3

    DAY 3 sqli-labs lesson 6 同lesson 5,只是把单引号改为双引号 sqli-labs lesson 7 同lesson 5,只是把单引号后面加两个空格,使用Burpsuit ...

  7. Maven私有仓库搭建以及使用

    一.使用Docker安装Nexus Docker search nexus docker pull docker.io/sonatype/nexus3 mkdir -p /usr/local/nexu ...

  8. JavaScript之函数柯里化

    什么是柯里化(currying)? 维基百科中的解释是:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术.意思就是当函 ...

  9. Oracle数据库拼音首字母模糊搜索

    1.建立函数 CREATE OR REPLACE FUNCTION F_PINYIN(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS V_COMPARE ); V_RET ...

  10. DNS测试工具的使用(了解)

    dig命令, host命令, nslookup命令,rndc命令 dig命令(直接测试DNS性能,不会查询/etc/hosts文件) dig [-t RR_TYPE] name [@SERVER] [ ...