随笔分类 - 优化—快速幂
摘要:T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次…… 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子
阅读全文
摘要:还是没有理解透原根……题目提示其实挺明显的,M是质数,然后1 include include using namespace std; const int N=20005,mod=1004535809,g=3; int n,m,x,k,s[N],d=2,id[N],lm,bt,re[N]; long
阅读全文
摘要:注意到周期234的lcm只有12,也就是以12为周期,可以走的状态是一样的 所以先预处理出这12个状态的转移矩阵,乘起来,然后矩阵快速幂优化转移k/12次,然后剩下的次数暴力转移即可 cpp include include include using namespace std; const int
阅读全文
摘要:矩阵乘法一般不满足交换律!!所以快速幂里需要注意乘的顺序!! 其实不难,设f[i]为i的答案,那么f[i]=(f[i 1] w[i]+i)%mod,w[i]是1e(i的位数),这个很容易写成矩阵的形式,然后按每一位分别矩阵快速幂即可 矩阵: f[i 1] w[i] 1 1 f[i] i 1 0 1
阅读全文
摘要:今天真是莫名石乐志 一眼矩阵乘法,但是这个矩阵的建立还是挺有意思的,就是把sum再开一列,建成大概这样 然后记!得!开!long!long!! cpp include include using namespace std; const int N=20; long long n,b[N],c[N]
阅读全文
摘要:!:自环也算一条路径 矩阵快速幂,把矩阵乘法的部分替换成Floyd(只用一个点扩张),这样每“乘”一次,就是经过增加一条边的最短路,用矩阵快速幂优化,然后因为边数是100级别的,所以把点hash一下最多剩下200个
阅读全文
摘要:参考:https://www.cnblogs.com/iwtwiioi/p/4986316.html 注意区间长度为1e5级别。 则假设n个数不全相同,那么他们的gcd小于最大数 最小数,证明:则gcdk2−gcdk1=gcd(k2−k1) d 所以特判一下全相等的情况就行利润 然后把区间除以k,这
阅读全文
摘要:第一问快速幂板子 第二问把式子转化为\\( xy\equiv Z(mod\ P)\rightarrow xy+bP=z \\),然后扩展欧几里得 第三问BSGS板子 cpp include include include include using namespace std; long long
阅读全文