mod函数

斯特林数&斯特林反演

最后都变了- 提交于 2019-12-26 01:24:10
第一类斯特林数 定义 第一类Stirling数 \(s(n,m)\) ,也可记为 \(\begin{bmatrix}n\\m\end{bmatrix}\) 。 第一类Stirling分为无符号第一类Stirling数 \(s_u(n,m)\) 和带符号第一类Stirling数 \(s_s(n,m)\) 。 他们分别表现为其升阶函数和降阶函数的各项系数,形式如下: \[ x^{n\downarrow}=x\cdot (x-1)\cdot (x-2)\cdots (x-n+1)=\sum_{k=0}^ns_s(n,k)\cdot x^k\\ x^{n\uparrow}=x\cdot (x+1)\cdot (x+2)\cdots(x+n-1)=\sum_{k=0}^ns_u(n,k)\cdot x^k \] 无符号Stirling数更为常用,表示将 \(n\) 个不同元素构成 \(m\) 个圆排列的数目。 有无符号Stirling之间有关系式 \(s_s(n,m)=(-1)^{n+m}\cdot s_u(n,m)\) 。 递推式 无符号第一类Stirling数 设元素有编号 \(1,2,...,n\) ,则将 \(n\) 个元素构成 \(m\) 个圆有两种情况: ①把第 \(n\) 个元素单独作为一个圆,用前 \(n-1\) 个元素构成 \(m-1\) 个圆,方案数 \(\begin

[2018集训队作业][UOJ450] 复读机 [DP+泰勒展开+单位根反演]

喜欢而已 提交于 2019-12-26 01:20:38
题面 传送门 思路 本文中所有$m$是原题目中的$k$ 首先,这个一看就是$d=1,2,3$数据分治 d=1 不说了,很简单,$m^n$ d=2 先上个$dp$试试 设$dp[i][j]$表示前$i$个复读机用掉了$j$个机会,注意这个东西最后求出来的是分配方案,还要乘以一个$n!$ $dp[i][j]=\sum_{k=0}^j [d|k]\binom{n-j+k}{k}dp[i-1][j-k]$ $dp[i][j]=\sum_{k=0}^j [d|k]\frac{(n-j+k)!}{(n-j)!k!}dp[i-1][j-k]$ $(n-j)!dp[i][j]=\sum_{k=0}^j [d|k]\frac{1}{k!}(n-j+k)!dp[i-1][j-k]$ 我们令生成函数$A(x)=\sum_{i=0}^{\infty}[d|i]\frac{x^i}{i!}$,$B_i(x)=\sum{j=0}^{\infty}(n-j)!dp[i][j]$ 那么可以发现$B_{i+1}(x)=B_i(x)\ast A(x)$ 也就是答案等于$A^m(x)$的第$n$项系数 我们看这个$A(x)$的形式,发现它下面有一堆阶乘,不由得让我们联想到泰勒展开 (我也不知道这个是怎么联想的不过就这样吧我会再写一篇博客解释的23333) 我们发现$e^x=\sum_{i=0}^{\infty}

LOJ 6485 LJJ学多项式

瘦欲@ 提交于 2019-12-26 01:19:00
前言 蒟蒻代码惨遭卡常,根本跑不过 前置芝士——单位根反演 单位根有这样的性质: \[ \frac{1}{n}\sum_{i=0}^{n-1}\omega_{n}^{ki}=\left[n|k\right] \] 所以可以得出单位根反演的式子 如果有 \(f(x)=\sum_{i=0}a_ix^i\) ,就可以推出 \[ \sum_{i=0}^na_i\left[d|i\right]=\frac{1}{d}\sum_{p=0}^{d-1}f(\omega_d^p) \] 证明可以把上面的式子代入,然后交换和号 思路 这道题要求的东西是这样的 \[ \sum_{i=0}^3a_i\sum_{j=0}^n\left(\begin{matrix}n\\j\end{matrix}\right)s^j\left[j\%4=i\right] \] 写出 \(\sum_{j=0}^n\left(\begin{matrix}n\\j\end{matrix}\right)s^j\) 的生成函数,由二项式定理得到是 \((sx+1)^n\) 不妨设i=0 则要求 \[ \sum_{j=0}^n\left(\begin{matrix}n\\j\end{matrix}\right)s^j\left[4|j\right] \] 直接套公式 原式等于 \[ \frac{1}{4}\sum_{p=0}^3f(

BJOI2018

依然范特西╮ 提交于 2019-12-24 02:38:08
BJOI2018 省选挂完,是时候更一篇题解了。对于鬼畜结论题我只放结论 不给证明 ,不要打我…… day1 二进制 试题描述 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数。他想研究对于二进制,是否也有类似的性质。 于是他生成了一个长为 \(n\) 的二进制串,希望你对于这个二进制串的一个子区间,能求出其有多少位置不同的连续子串,满足在重新排列后(可包含前导 \(0\) )是一个 \(3\) 的倍数。两个位置不同的子区间指开始位置不同或结束位置不同。 由于他想尝试尽量多的情况,他有时会修改串中的一个位置,并且会进行多次询问。 输入 输入第一行包含一个正整数 \(n\) ,表示二进制数的长度。 之后一行 \(n\) 个空格隔开的整数,保证均是 \(0\) 或 \(1\) ,表示该二进制串。 之后一行一个整数 \(m\) ,表示询问和修改的总次数。 之后 \(m\) 行每行为 \(1\ i\) ,表示 pupil 修改了串的第 \(i\) 个位置( \(0\) 变成 \(1\) 或 \(1\) 变成 \(0\) ),或 \(2\ l\ r\) ,表示 pupil 询问的子区间是 \([l,r]\) 。 串的下标从 \(1\) 开始。 输出 对于每次询问,输出一行一个整数表示对应该询问的结果。 输入示例 4 1 0 1 0 3 2 1

题解 P4705 【玩游戏】

江枫思渺然 提交于 2019-12-18 07:30:39
这题是真的神仙啊...居然用的 stl 来卡常? 话说 998244353 真的可以一眼 NTT ? noteskey 所以说只要推柿子就好了但是有的地方的推导根本就想不到... 我们令第 t 个答案为 \(ANS_t\over nm\) ,除去 nm 其实就是算期望时要除去的方案数 那么有: \[\begin{aligned}{}ANS_t=&\sum_{i=1}^{n} \sum_{j=1}^m (a_i+b_j)^t \\=&\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k=0}^{t} \begin{pmatrix} t\\k \end{pmatrix} a_i^{k}b_{j}^{t-k} \\=&\sum_{k=0}^{t} \begin{pmatrix} t\\k \end{pmatrix} \sum_{i=1}^{n}a_i^{k} \sum_{j=1}^{m} b_{j}^{t-k} \\=& \sum_{k=0}^{t} \begin{pmatrix} t\\k \end{pmatrix} \Big( \sum_{i=1}^{n}a_i^{k} \Big) \Big(\sum_{j=1}^{m} b_{j}^{t-k} \Big) \\=&\sum_{k=0}^{t} t! \Big({ \sum_{i=1}^{n}a_i^{k}\over

fft,ntt总结

a 夏天 提交于 2019-12-17 06:46:48
一个套路:把式子推成卷积形式,然后用fft或ntt优化求解过程。 fft的扩展性不强,不可以在fft函数里多加骚操作--DeepinC T1:多项式乘法 板子题 T2:快速傅立叶之二 另一个板子,小技巧:把一个数组反转过来,以符合卷积形式 T3:力 拆式子,把q j 除到左边,然后把大于j的贡献和小于j的贡献分开考虑,对于小于j的,直接用fft统计,对于大于的,先反转再fft T4:Normal 大神题,考虑把贡献拆成点对,对于两个点i与j,若i能对j作出贡献,则i到j的路径上没有断点,同样删除i到j路径以外的点不影响i与j之间的贡献,则i对j作出贡献的概率为 $\frac{1}{dis(i,j)}$则答案即为$\sum\limits_{i=1}^{n}\sum \limits_{j=1}^{n}\frac{1}{dis(i,j)}$ 然后这玩意可以用点分治求,合并子树用fft优化 1 #include<bits/stdc++.h> 2 #define N 70050 3 #define LL long long 4 const int mod=998244353,G1=3,G2=(mod+1)/G1; 5 #define cri const register int 6 using namespace std; 7 int a[N],b[N]; 8 int n; 9 int he

多项式总结(STAGE 1)

情到浓时终转凉″ 提交于 2019-12-16 10:53:47
这么难的专题居然只给了这么短时间。。。 然而在NC的教导之下还是有一定的收获的。 必须打广告: 0 , 1 , 2 , 3 附带一个垃圾博客: -1 按照习惯,堆砌结论而不加证明。 Section1 导数: 基本形式:$f'(x)=\lim\limits_{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x}$ 一次函数:$f(x)=ax+b \rightarrow f'(x)=a$ 幂函数:$f(x)=x^n \rightarrow f'(x)=nx^{n-1}$ 正弦函数:$\lim\limits_{x \rightarrow 0}sin(x)=x $,得到$f(x)=sin(ax+b) \rightarrow f'(x)=a \ cos(ax+b)$ 余弦函数:$\lim\limits_{x \rightarrow 0}cos(x)=1 $,得到$f(x)=cos(ax+b) \rightarrow f'(x)=-a \ sin(ax+b)$ 指数函数:$e=\lim\limits_{n \rightarrow + \infty} (1+ \frac{1}{n})^n$,得到$f(x)=a^x \rightarrow f'(x)=a^x ln \ a$   特别的,自然对数的指数函数:$f(x)=e^x

「总结」多项式生成函数相关(1)

孤街浪徒 提交于 2019-12-11 20:19:02
实在是太毒瘤了。 大纲。 多项式生成函数相关 默认前置:微积分,各种数和各种反演,FFT,NTT,各种卷积,基本和式变换。 主要内容: 泰勒展开,级数求和,牛顿迭代,主定理。    //例题:在美妙的数学王国中畅游,礼物 多项式全家桶:乘法,求逆,求导,积分,分治,ln,exp,fwt,MTT。 //城市规划,图的价值,染色,遗失的答案,按位或,随机游走。 生成函数:普通型生成函数,指数型生成函数计数原理。 //猎人杀,遗忘的集合,生成树计数 例题。 一、泰勒展开和级数求和 1.泰勒展开 即对于任何函数 \(f(x)\) ,如果在 \(x_0\) 处 \(n\) 阶可导,那么满足如下公式: \[f(x)=\sum\limits_{i=0}^{n}\frac{f^{(i)}(x_0)(x-x_0)^i}{i!}\] 这里当 \(x_0\) 为0的时候被称作麦克劳林公式。 先推导麦克劳林公式 即: \[f(x)=\sum\limits_{i=0}^{n}\frac{f^{(i)}(0)x^i}{i!}\] 这里只证明多项式函数的正确性(其实是因为任意函数太难证了吧)。 设多项式函数: \[f(x)=\sum\limits_{i=0}^{n}a_ix^i\] 那么: \[f^{(i)}(x)=\sum\limits_{j=0}^{n}a_{j+i}x^{j}\prod\limits_{k

luogu P5488 差分与前缀和 FFT

ぐ巨炮叔叔 提交于 2019-12-11 10:27:56
又是一道FFT 好题。 首先来看一看求前缀和。 求一次前缀和就先当于卷上一个系数全为1的多项式,即 \(\displaystyle \sum_{i=0}^{\infin}x^i\) ( 想一想,为什么 ),这个东西就等于 \(\displaystyle \frac{1}{1-x}\) ,简单证明一下。 \[ S=1+x+x^2+...\\ xS=x+x^2+x^3...\\ 上边的式子减去下边的式子得到\\ S-xS=1\\ S=\frac{1}{1-x} \] 是不是感觉天衣无缝但又十分扯淡?没错,这只有在 \(-1<x<1\) 时才成立。但生成函数是形式幂级数,我们不用关心x的具体取值。 回到我们刚才的问题,因为卷积具有结合律,所以我们要求的就是 \(\displaystyle\frac{1}{(1-x)^k}\) 结论:这个式子的n次系数是 \(C_{n+k-1}^{k-1}\) (C是组合数)。 证明:回想一下 \(\displaystyle \sum_{i=0}^{\infin}x^i\) 的每一次相乘的含义,可知 \(\displaystyle (\sum_{i=0}^{\infin}x^i)^k\) 中n次系数的含义就是经过k次组成n的方案数,我们可以将n看成是n个小球,k看成是k个盒子,因为组成n的每个 “1”是一样的,每个多项式是不一样的,所以球相同,盒子不同

一个人的数论:莫比乌斯反演,伯努利数

雨燕双飞 提交于 2019-12-10 06:34:40
在做多项式的时候发现自己不会伯努利数,被推荐回来做这道题。 然后就发现这真的是个大神题,而且有一些思路很重要。 以后不能再漏题丢知识点了不然被迫填坑是真的难受。 题意式子: $ \sum\limits_{i=1}^{N} \left[ gcd \left( i,N \right) =1 \right] i^d $ 经典反演: $=\sum\limits_{i=1}^{N} i^d \sum\limits_{j|i \ and \ j|N} \mu(j)$ $=\sum\limits_{j|N} \sum\limits_{i=1}^{\frac{N}{j}} (ij)^d \mu(j)$ $=\sum\limits_{j|N} \mu(j) j^d \sum\limits_{i=1}^{\frac{N}{j}}i^d$ 后面是自然数幂和的公式。如果原来没有听说过伯努利数,那么你可以凭空猜测下列结论。 如果听说过伯努利数,那么你就知道对于确定的d,$\sum\limits_{i=1}^{n} i^d =\sum\limits_{i=1}^{d+1} a_i \times n^{i}$ 其中$a_i$表示一个特定的系数,不随n变化而变化。事实证明这是正确的,我不会理论证明。 这样的话就得到了一个关于n的d+1次多项式,把求和的复杂度由与n相关变为了与d相关。(伯努利数的应用)