BM递推杜教版【扩展】】的更多相关文章

#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (long long i=a;i<n;i++) #define per(i,a,n) for (long long i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #def…
也就是模数不是质数的时候, //下面的板子能求质数和非质数,只需要传不同的参数. #include <cstdio> #include <cstdlib> #include <cassert> #include <cstring> #include <bitset> #include <cmath> #include <cctype> #include <unordered_map> #include <…
BM求线性递推模板(杜教版) BM求线性递推是最近了解到的一个黑科技 如果一个数列.其能够通过线性递推而来 例如使用矩阵快速幂优化的 DP 大概都可以丢进去 则使用 BM 即可得到任意 N 项的数列元素 参考博客 : 暂时没有. 找到了一个.希望你能看懂吧.click here 以下是 2018 焦作网络赛 L 题 AC 代码.可做模板 #include <cstdio> #include <cstring> #include <cmath> #include <…
Berlekamp-Massey 算法用于求解常系数线性递推式 #include<bits/stdc++.h> typedef std::vector<int> VI; typedef long long ll; typedef std::pair<int, int> PII; const ll mod = 1000000007; ll powmod(ll a, ll b) { ll res = 1; a %= mod; assert(b >= 0); for(;…
题意 从数字 $0$ 除法,每次向前走 $i$ 步,$i$ 是 $1 \sim K$ 中等概率随机的一个数,也就是说概率都是 $\frac{1}{K}$.求落在过数字 $N$ 额概率,$N=-1$ 表示无穷远. 分析 设落在过 $i$ 的概率为 $p_i$,则 $p_i = \frac{1}{K}p_{i-1} + \frac{1}{K}p_{i-2}...+\frac{1}{K}p_{i-k}$. 以 $k=2$ 为例, $p_0 = 1 \\p_1 = \frac{1}{2} \\p_2 =…
从别的大佬处看到的模板 #include<bits/stdc++.h> #define fi first #define se second #define INF 0x3f3f3f3f #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #define pqueue priority_queue #define NEW(a,b) memset(a,b,sizeof(a)) #define Pii pair<int…
题目链接:http://47.93.249.116/problem.php?id=2182 题目描述 河神喜欢吃零食,有三种最喜欢的零食,鱼干,猪肉脯,巧克力.他每小时会选择一种吃一包. 不幸的是,医生告诉他,他吃这些零食的时候,如果在连续的三小时内他三种都吃了,并且在中间一小时 吃的是巧克力,他就会食物中毒.并且,如果河神在连续三小时内吃到相同种类的食物,他就会不开心. 假设每种类零食的数量都是无限的,那么如果经过n小时,让河神满意的零食吃法有多少种呢?(开心又不 会食物中毒的吃法)答案可能过…
题意:计算斐波那契数列前n项和的m次方模1e9 题解: $F[i] – F[i-1] – F[i-2] = 0$ $F[i]^2 – 2 F[i-1]^2 – 2 F[i-2]^2 + F[i-3] = 0$ $F[i]^3 – 3 F[i-1]^3 – 6 F[i-2]^3 + 3 F[i-3] + F[i-4] = 0$ 可以看出,斐波那契数列的高次幂依然是可以线性递推出来的,可以推广到任意幂次的情况,具体证明参见Fibonomial Coefficient 硬套杜教bm即可. #inclu…
题目链接 题意 : 实际上可以转化一下题意 要求求出用三个不同元素的字符集例如 { 'A' .'B' .'C' } 构造出长度为 n 且不包含 AAA.BBB CCC.ACB BCA.CAC CBC 这其中任意一个字符串的方案数 分析 : 方法一 (BM 求线性递推) 直接暴力出前 10 项的答案.然后猜它其实可以由线性递推递推而来 丢进杜教的 BM 模板里面就可以直接求出第 N 项了 实际上这个可以不用猜.这种不包含某些串的题目 如果你做过类似的.就会知道实际上是可以构造出一个矩阵然后快速幂…
题目大意 有一个 \(n\) 个点的环,你要用 \(m\) 中颜色染这 \(n\) 个点. 要求连续 \(m\) 个点的颜色不能是 $1 \sim m $ 的排列. 两种环相同当且仅当这两个环可以在旋转之后变得一模一样. 求方案数对 \({10}^9+7\) 取模的结果. \(n\leq {10}^9,m\leq 7\) 题解 考虑 polya 定理,记 \(f(n)\) 为 \(n\) 个点的答案,\(g(n)\) 为 \(n\) 个点不考虑旋转的答案.那么就有 \[ \begin{align…
这里所有的内容都将有关于一个线性递推: $f_{n} = \sum\limits_{i = 1}^{k} a_{i} * f_{n - i}$,其中$f_{0}, f_{1}, ... , f_{k - 1}$是已知的. BM是用于求解线性递推式的工具,传入一个序列,会返回一个合法的线性递推式,一个$vector$,其中第$i$项表示上式的$a_{i + 1}$. CH用于快速求解常系数齐次线性递推的第$n$项,我们先会求出一个特征多项式$g$,$g$的第$k$项是$1$,其余项中第$k - i…
题意:给出,三个函数,h,b,a,然后T次询问,每次给出n,求sqrt(an); 思路:不会推,但是感觉a应该是线性的,这个时候我们就可以用BM线性递推,自己求出前几项,然后放到模板里,就可以求了. 数据范围在1e15,1000组都可以秒过. ( 那么主要的问题就是得确保是线性的,而且得求出前几项. 如果是K<1e6次多项式,我们可以用拉格朗日插值法求第N项,比如求K次方的前缀和,先放着,有空以启整理了. #include<bits/stdc++.h> using namespace s…
\(\color{#0066ff}{ 题目描述 }\) 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p\),其中gcd(a,b)表示a与b的最大公约数. \(\color{#0066ff}{输入格式}\) 一行两个整数p.n. \(\color{#0066ff}{输出格式}\) 一行一个整数(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~…
[模板]线性递推+BM算法 给出一个数列 \(P\) 从 \(0\) 开始的前 \(n\) 项,求序列 \(P\) 在\(\bmod~998244353\) 下的最短线性递推式,并在 \(\bmod~ 998244353\) 下输出 \(P_m\). \(m\leq 10^9,1\leq n\leq 10000\) 保证递推式最长不超过 \(5000\). Berlekamp-Massey 算法 Berlekamp-Massey 算法,常简称为 BM 算法,是用来求解一个数列的最短线性递推式的算…
这个板子能够解决任何线性递推式,只要你确定某个数列的某项只与前几项线性相关,那么把它前若干项丢进去,这个板子就能给你返回你要求的某项的值. 原理???(待补充) #include<bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp…
哎呀大水题..我写了一个多小时..好没救啊.. 数论板子X合一? 注意: 本文中变量名称区分大小写. 题意: 给一个\(n\)阶递推序列\(f_k=\prod^{n}_{i=1} f_{k-i}b_i\mod P\)其中\(P=998244353\), 输入\(b_1,b_2,...,b_n\)以及已知\(f_1,f_2,...,f_{n-1}=1\), 再给定一个数\(m\)和第\(m\)项的值\(f_m\), 求出一个合法的\(f_n\)值使得按照这个值递推出来的序列满足第\(m\)项的值为…
https://codeforces.com/contest/1117/problem/D 题解:有一些魔法宝石,魔法宝石可以分成m个普通宝石,每个宝石(包括魔法宝石)占用1个空间,让你求占用n个空间的方法有几种,有不同数量的魔法宝石和不同分法的方法算不同的方法, 分析:根据一些猜想可以推出递推式f[n]=f[n-1]+f[n-m]  : 答案也比较好猜想,牺牲一个然后分解 m 个 然后就是简单的构造矩阵快速幂 或者使用无敌杜教 这里给出点杜教心得 , 有时候并不是只用给出8项 , 而是给的数据…
BM算法求求线性递推式   P5487 线性递推+BM算法   待AC.   Poor God Water   // 题目来源:ACM-ICPC 2018 焦作赛区网络预赛 题意   God Water喜欢吃Meat, Fish 和 Chocolate,每个小时他会吃一种食物,但有些吃的顺序是危险/不高兴的.求在N小时内他的饮食方案有多少种不同组合.在连续三小时内这些组合是不可行的: unhappy : MMM FFF CCC dangerous : MCF FCM CMC CFC   思路1…
我也不知道什么是"莫比乌斯反演"和"杜教筛" Part0 最近一直在搞这些东西 做了将近超过20道题目吧 也算是有感而发 写点东西记录一下自己的感受 如果您真的想学会莫比乌斯反演和杜教筛,请拿出纸笔,每个式子都自己好好的推一遍,理解清楚每一步是怎么来的,并且自己好好思考. Part1莫比乌斯反演 莫比乌斯反演啥都没有,就只有两个式子(一般只用一个) 原来我已经写过一次了,再在这里写一次 就只写常用的那个吧 基本的公式 对于一个函数\(f(x)\) 设\(g(x)=\…
题目意思非常明确,就是叫你求第n项,据我们学校一个大佬说他推出了矩阵,但是我是菜鸡,那么肯定是用简单的方法水过啦!我们先p^(1/2)的复杂度处理出i=[i,p]范围内的所有种类的(int)(p/i),然后我们就可以知道种可能的除数的范围,就是分成几块 这里我不太会表达,看代码比较好 /** 求n/i的所有结果 **/ #include<stdio.h> int main( ){ int n; scanf("%d", &n); long long nex; ; i&…
题目链接 题意:给定\(n\le 10^9\),求:\(F(n)=\sum_{i=1}^n\sum_{j=1}^i\frac{\mathrm{lcm}(i,j)}{\mathrm{gcd}(i,j)}\),对1e9+7取模 推式子: \(F(n)=\sum_{i=1}^n\sum_{j=1}^i\frac{\mathrm{lcm}(i,j)}{\mathrm{gcd}(i,j)}\) \(=\sum_{i=1}^n\sum_{j=1}^i\frac{ij}{\gcd^2(i,j)}\) \(=\…
题面: 传送门 实际上就是求: 思路: 看到gcd就先反演一下,过程大概是这样: 明显的一步反演 这里设,S(x)等于1到x的和 然后把枚举d再枚举T变成先枚举T再枚举其约数d,变形: 后面其中两项展开,把T提出来 S那里可以数论分块,那么只要S后面那个东西可以筛出来,就可以O(sqrt(n)) 发现后面的那部分可以狄利克雷卷积一波 这明显是一个积性函数,但是n有10^10,所以不能线筛 考虑使用杜教筛,令上述函数为f,函数S为f的前缀和 套用杜教筛模板式 现在问题就是选一个合适的g函数了 我们…
求$\sum_{i=1}^{n}\varphi (i)$,$n\leqslant 1e10$. 这里先把杜教筛的一般套路贴一下: 要求$S(n)=\sum_{i=1}^{n}f(i)$,而现在有一数论函数$g(i)$,$g(i)$的前缀和很无脑,且$f$和$g$的狄利克雷卷积的前缀和很无脑(太巧了吧..),那么由 $\sum_{i=1}^{n}\sum_{d|i}f(d)g(\frac{i}{d})$ 闪一句,常用套路:设$i=kd$,转而枚举$k$. $=\sum_{k=1}^{n}g(k)\…
杜教筛 适用条件 你要能构造出\(g(x),h(x)\),使得\(h=f*g\). \(G(x),H(x)\)的值可以快速计算. 过程 我们要求的是\(F(n)=\sum_{i=1}^{n}f(i)\),现在有\(h=f*g\),\(G(x),H(x)\)分别为\(g(x),h(x)\)的前缀和. \[ \begin{aligned} H(n)=&\sum_{i=1}^{n}h(i)\\ =&\sum_{i=1}^{n}\sum_{d|i}f(\frac{i}{d})g(d)\\ =&am…
杜教筛 \(\) 是 \(\) 的前缀和,\(\), \(\) 同理. 假设 \( × = ℎ\) ,并且 \(, \) 易求出,\(\) 难求出. 那么 \[H () = \sum_{ \cdot ≤} () () = \sum_{≤} () (\frac {} {})\\ = f(1)\cdot () + \sum_{2≤≤} () (\frac {} {})\] 有: \[f(1)\cdot G(n)=H(n)-\sum_{2≤≤} () (\frac {} {}) \] 整除分块,可以在…
==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本声明). 本文不定期修改完善,为保证内容正确,建议移步原文处阅读. 本文链接:http://www.cnblogs.com/wlsandwho/p/4205524.html ===============================================================…
1237 最大公约数之和 V3 题意:求\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\) 令\(A(n)=\sum_{i=1}^n(n,i) = \sum_{d\mid n}d \cdot \varphi(\frac{n}{d})\) \(ans = 2*\sum_{i=1}^n A(i) -\sum_{i=1}^ni\) 套路推♂倒 \[ S(n) =\sum_{i=1}^n\sum_{d\mid i}d \cdot \varphi(\frac{i}{d}) =\sum_{i…
hihocoder #1456 : Rikka with Lattice(杜教筛) 题意 : 给你一个\(n*m\)方格图,统计上面有多少个格点三角形,除了三个顶点,不覆盖其他的格点(包括边和内部). 答案对于\(998244353\)取模... (\(n,m \le 5 * 10^9\)) 题解 : 这个题十分的巧妙... 集训时是大佬ztzshiwo出的.. 据他所说,是不那么杜教筛的杜教筛QAQ 考试时候提示了一个皮克定理... 皮克定理: \[S=a+\frac{b}{2}-1\] \(…
BZOJ_3944_Sum_杜教筛 Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用空格分隔的数ans1,ans2 Sample Input 6 1 2 8 13 30 2333 Sample Output 1 1 2 0 22 -2 58 -3 278 -3 1655470 2 学习下杜教筛,推一波式子. 首先有反演式子$\sum\limits_{d|n}\varphi(d)=…
杜教筛 浅谈一类积性函数的前缀和 - skywalkert's space - CSDN博客 杜教筛可以在\(O(n^{\frac 23})\)的时间复杂度内利用卷积求出一些积性函数的前缀和. 算法 给定\(f(n)\), 现要求\(S(n)=\sum_{i=1}n f(i)\). 定义卷积运算 \((f*g)(n) = \sum_{d | n} f(d) g(\frac{n}{d})\). 如果存在\(g(n)\), 满足\(f*g=h\), 且\(g\)和\(h\)都能 \(O(1)\) 求…