快速幂
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
luogu1045 麦森数【2013普及】(高精+快速幂+数学)
2n和2n−12^n和2^n-1显然一定是位数相同的。。。因此直接log2n∗log102=log10nlog_2 n*log_{10}2=log_{10}n。 快速幂复杂度:log2nlog_2 n,就是把n变成二进制嘛,自然最多乘log2nlog_2n次。原创 2017-08-08 22:56:22 · 299 阅读 · 0 评论 -
CF603B Moodular Arithmetic(数论+快速幂)
首先k=0时,答案就是pp−1p^{p-1}k=1时,答案就是ppp^pk>=2时答案就是pp−1mp^{\frac{p-1}{m}},其中m为k mod p意义下的order。根据费马小定理,我们有kp−1≡1mod pk^{p-1}\equiv1\mod\ p ,所以m一定是p-1的因数,也可以O(p√)O(\sqrt p)的枚举p-1的因数来算。原创 2018-03-09 22:51:16 · 394 阅读 · 0 评论 -
CF225E Unsolvable(数论)
z需要满足的条件就是z=2t−1z=2^t-1,且t+1t+1是梅森素数。 梅森素数就是满足2p−12^p-1为素数的素数p。原创 2018-03-10 23:35:12 · 511 阅读 · 0 评论 -
bzoj5193 [Usaco2018 Feb]Cow Gymnasts(数学)
我们考虑n个台子上的牛最少的一个台子上有m只,记这个台子为i,则对于所有的j≡i(modg)j \equiv i \pmod{g},g=gcd(N,m)g = \gcd(N,m),台子j上的牛也必为m只。其余台子上的牛最多m+1只,且具有周期性,即以g为周期。具体证明请参见官方题解:传送门因此对于最少的牛数为m(m< n)的情况,我们一共有2gcd(N,m)−12^{\gcd(N,m)} - 1种方原创 2018-03-04 22:14:25 · 935 阅读 · 0 评论 -
bzoj5190 [Usaco2018 Jan]Stamp Painting(dp+计数)
一共有n个格子,m种颜色,你每次可以 把连续K个格子涂成一种颜色。问你最后有多少种 涂色结果。(不能留有空白格子) 我们考虑怎样的结果序列是合法的,显然必须有 一段长度为k的连续区间为同一颜色,因为你最后一下 肯定要刷k个相同。我们可以发现,只要满足有这么一段 就都是合法方案。因此我们就是要统计至少有一段 k个相同的数的序列个数。我们发现求它的补集更好求, 即没有一段k个相同的数的序原创 2018-03-13 09:35:21 · 587 阅读 · 0 评论 -
bzoj1408 [Noi2002]Robot(欧拉函数+快速幂)
这题…因缺思厅啊qaq 就…就直接搞就好了。 因为欧拉函数是积性函数,第一问第二问互相搞一搞就好了。 第三问用总的减去第一问第二问的答案即可。 因为∑d|nϕ(d)=n\sum\limits_{d|n}\phi(d)=n,所以总的就是m-1(此题要求ϕ(1)=0\phi(1)=0)原创 2018-04-07 16:38:51 · 225 阅读 · 0 评论 -
bzoj3992 [SDOI2015]序列统计(NTT+多项式快速幂+生成函数)
首先类似实数域的对数,我们在模意义下有离散对数ind。设模数为m,m的原根为g,则ind(i)=j表明gj≡imodmg^j\equiv i \mod m。根据原根的性质,我们知道{ind(x)}和{x}是一一对应的。 类似对数,我们可以把模意义下的乘法运算化作模意义下的加法运算: ind(xy%m)=(ind(x)+ind(y))%m−1ind(xy\%m)=(ind(x)+ind(y))\%原创 2018-04-03 10:53:46 · 294 阅读 · 0 评论 -
bzoj1965 [Ahoi2005]SHUFFLE 洗牌(快速幂+乘法逆元+快速乘)
我们发现第x张牌经过一次洗牌后会变成第2x%(n+1)张。 因此第x张牌经过m次洗牌会变成第x2m%(n+1)x2^m\%(n+1)张牌。 我们就是要求x2m≡lmodn+1x2^m\equiv l \mod n+1,因为n+1肯定是奇数,所以(2,n+1)=1. 所以x=l∗inv(2)mx=l*inv(2)^m,2的逆元为(n/2+1)。 然后乘法会爆ll,推荐O(1)快速乘。#incl原创 2018-04-04 10:55:08 · 256 阅读 · 0 评论 -
bzoj3209 花神的数论题(数位dp+快速幂)
考虑有x个1的有s[x]个,那么答案就是∏xs[x]\prod x^{s[x]} 那么我们现在的问题就是如何求<=n的数中有几个数的二进制表示有x个1.我们先处理出f[i][j]表示i位数有j个1的方案数,然后加上大小的限制,搞一搞就好了。我的写法是求比n小的有多少个,所以要给n++ 复杂度O(log2n)O(log^2n)原创 2018-04-05 12:20:45 · 197 阅读 · 0 评论 -
bzoj4891 [Tjoi2017]龙舟(pollard-rho+素数检测)
这题主要问题在于我们要求一个大数对大数的逆元。 我们考虑把大模数分解质因数之后就可以O(mlogV)O(mlogV)的上下约分,然后看分母是否和大模数互质,以判断是否存在逆元。然后这个大数如何质因数分解呢?我们可以用pollard-rho+miller-rabin来做。复杂度O(n1/4)O(n^{1/4}) pollard-rho怎么做呢?大概就是你每次随机若干个数去试,看他们是不是n的因子,原创 2018-04-18 14:48:32 · 476 阅读 · 0 评论 -
bzoj4589 Hard Nim(博弈论+fwt+快速幂)
搞出生成函数,把它异或卷积n次即可,最后答案就是0的系数。 fwt之后直接快速幂即可。再ifwt回来。 复杂度O(mlogm+mlogn)O(mlogm+mlogn)O(mlogm+mlogn)#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#de...原创 2018-05-25 14:42:05 · 517 阅读 · 0 评论 -
bzoj4037 [HAOI2015]数字串拆分(矩阵快速幂+dp)
对于计算f[n],我们显然可以构造出m*m的转移矩阵A来矩阵快速幂求。 然后我们考虑最后的答案,如果是分成了k个数:a1,a2,…,ak。 那么结果就是Aa1+a2+...+ak=Aa1∗Aa2∗...∗AakAa1+a2+...+ak=Aa1∗Aa2∗...∗AakA^{a_1+a_2+...+a_k}=A^{a_1}*A^{a_2}*...*A^{a_k} 最后的答案就是若干个这种矩阵加...原创 2018-06-11 21:53:22 · 380 阅读 · 0 评论 -
Wannafly挑战赛18
https://www.nowcoder.com/acm/contest/129#question A.序列(组合数学) -2和0.5一样多,且都为偶数,枚举一下具体个数就好了 O(n)O(n)O(n) 考时ZZ了,不会跳了过去…很久以后才A掉gg B.随机数(矩阵快速幂) 设f[i]表示前i个数有奇数个1的概率,则 f[i+1]=f[i]∗(1−p)+(1−f[i])∗pf[i+1...原创 2018-06-22 23:09:24 · 306 阅读 · 0 评论 -
bzoj1494 生成树计数(状压dp+生成树+矩阵倍增)
看数据,k<=5,n<=1e15,n极大,显然只能矩阵倍增去算。考虑dp,k极小,每个点最多能和前k个点连边,因此我们需要知道前k个点的联通情况,采用状压dp,用最小表示法。 我们可以先用一个DFS预处理出所有可能出现的连通性的状态。然后再枚举连通性状态S以及下一个点和S里的K个点中的哪些点连边,再判断从连通性状态S转移出来的新状态S′是否是合法的,若合法,在邻接矩阵里,标记从S到S′的方案数加1原创 2017-10-12 22:37:48 · 589 阅读 · 0 评论 -
NOIP模拟9.27
2013提高D1 A.转圈游戏(快速幂)AC B.火柴人排队(树状数组求逆序对)AC C.货车运输(贪心+并查集+树上倍增)AC原创 2017-09-27 11:31:51 · 351 阅读 · 0 评论 -
bzoj4887 [Tjoi2017]可乐(dp+矩阵倍增)
f[0][i][t]表示第t秒到i的全部方案(含之前已经在i炸掉的)f[1][i][t]表示第t秒到i而且还在i没炸的方案数,则 f[0][i][t]=f[0][i][t-1]+f[1][j][t-1]+f[1][j][t-1]|i,j之间有边 f[1][i][t]=f[1][j][t-1]+f[1][i][t-1]|i,j之间有边 t=10^9,需要矩阵倍增加速。#include <cstd原创 2017-08-17 14:31:08 · 864 阅读 · 0 评论 -
bzoj1008 [HNOI2008]越狱(组合数学+快速幂)
求越狱的可能状态数,不太好求。我们转化一下:用所有的状态数(mnm^n)-不会越狱的状态数(m∗(m−1)n−1m*(m-1)^{n-1})即可。原创 2017-08-09 22:58:27 · 378 阅读 · 0 评论 -
luogu1965 【2013提高】转圈游戏(快速幂)
一轮之后x的位置为(x+m)%n,10k10^k轮之后x的位置为(x+m∗10k)(x+m*10^k)%n,用快速幂算一下10k10^k%n即可。原创 2017-08-09 23:00:37 · 579 阅读 · 1 评论 -
bzoj2751 [HAOI2012]容易题(数学+快速幂)
答案是求合法序列的积的和,其实就是每个位置的合法值的和的积,即 (可以把前m-1个位置相同的式子提出来,发现乘的就是第m个位置的合法值的和,以此类推。)这样的话,虽然位置有10e9个,但是有限制的位置最多10e5个,剩下的位置的合法值的和都是sum(n*(n+1)/2),可以用快速幂进行计算,对于有限制的位置单个计算(排序后即可)。时间就可以过了。原创 2017-08-09 23:02:27 · 394 阅读 · 0 评论 -
poj3070 Fibonacci(矩阵倍增模板)
矩阵倍增模板题。从此开始我们的矩阵倍增之旅! 题解什么的题目说得很清楚了。。就是求一个矩阵的k次幂,和普通的快速幂是一样滴,只不过再多写一个矩阵乘法。矩阵倍增一般用来加速dp的转移,后面的题会见到。原创 2017-08-10 22:15:35 · 257 阅读 · 0 评论 -
vijos1049 送给圣诞夜的礼品(矩阵倍增)
用01矩阵模拟位置的交换,m个操作为一组,倍增(k/m)次。remain的(k%m)次,单独做,最后乘起来。原创 2017-08-10 23:00:19 · 370 阅读 · 0 评论 -
vijos1067 Warcraft III 守望者的烦恼(矩阵倍增)
f[i]=f[i-1]+f[i-2]+…+f[i-k].根据递推式构造出转移矩阵trans,trans.mat[1][n]表示f[i]。初始时f[0]=1.这便是矩阵倍增的真正用处了。。。原创 2017-08-10 23:27:09 · 796 阅读 · 0 评论 -
poj3233 Matrix Power Series (二分+矩阵+快速幂)
首先A^k我们可以通过快速幂求得,但是我们不能每一项都去算快速幂,这样还是会超时的。我们发现可以通过二分优化。 如果k为偶数,那么 (A+A2+....AK)=(A+...+Ak2)+Ak2∗(A+...+Ak2)(A+A^2+....A^K) = (A+...+A^{k\over 2})+A^{k\over 2}*(A+...+A^{k\over 2}) 如果k为奇数,那么 (A+A2+.原创 2017-08-10 23:29:35 · 380 阅读 · 0 评论 -
bzoj4870 [Shoi2017]组合数问题(dp+矩阵倍增)
翻译一下题目:实际上就是要我们从nk件物品里面选出若干件,使得其数量模k等于r的方案数。f[i][j]表示前i件物品拿了若干件使得其数量模k等于j的方案数。显然有dp方程:f[i][j]=f[i-1][j]+f[i-1][j-1]。初始值:f[0][0]=1.用矩阵快速幂加速一下就好啦。时间复杂度为O(lognk∗k3)O(lognk*k^3)原创 2017-08-10 23:30:24 · 507 阅读 · 0 评论 -
hdu2604 queuing(dp+矩阵倍增)
f[i]表示i个人排队时为E-queue的方案数。则有:f[n]=f[n-1]+f[n-3]+f[n-4] 解释一下:第n个人为m时,前n-1个只要合法就行,所以是f[n-1]. 第n个人为f时,前n-1个人合法不能保证这n个都合法,我们再看第n-1位,第n-1位为m时,第n-2为显然只能是m,这样的话只要保证前n-3个合法即可,所以是f[n-3]。第n-1位为f时,第n-2为显然只能是m,第n原创 2017-08-10 23:30:57 · 468 阅读 · 0 评论 -
bzoj2875 [noi2012]随机数生成器(矩阵倍增)
挺裸的矩阵倍增。。。就是再处理一下ll*ll.思想类似快速幂,例如对x*y,把x变成二进制,y去倍增,每次都mod m,变乘法为许多次加法,保证不会溢出。原创 2017-08-10 23:31:37 · 439 阅读 · 0 评论 -
CF870E points, Lines and Ready-made Titles(并查集+图论+快速幂)
我们把每条线看做并查集上的一个点,那么图上的每个点相当于连接了两条线。我们去维护一下每个联通快内有多少条边,是否有环。如果没环,也就是n个点,n-1条边,是一棵树,由于每条边最多只能贡献一个点,所以显然不能实现n个点的情况。总情况数为2^n -1。如果有环,可以实现所有情况,总情况数为2^n。都乘起来就好了。(显然互不影响的边只要用乘法原理乘起来就好啦)orz leoly原创 2017-10-18 10:44:23 · 432 阅读 · 0 评论 -
luogu4714 「数学」约数个数和(组合数学+miller_rabin判素数)
luogu6月月赛E。 当时绝对是脑抽了 其实O(wK)O(wK)O(wK)的暴力递推还是可以写的呀… 令n=∏pqiin=∏piqin=\prod p_i^{q_i} 我们发现可以分开讨论每一个pqiipiqip_i^{q_i},最后乘起来就好了,且只跟次数q有关 设f[k][q]f[k][q]f[k][q]表示pqpqp^q的k次因数个数。 那么有递推式f[k][q]=∑i=0qf...原创 2018-06-23 17:43:10 · 330 阅读 · 0 评论