2020牛客暑期多校训练营(第六场)Interesting Stiriling【第一类斯特林数】【lucas】【反演】

题目大意

 求第一类斯特林数的区间和,即:
( ∑ i = l r [ n i ] ) % p \Bigg(\sum_{i=l}^{r}\begin{bmatrix}n\\i\end{bmatrix} \Bigg)\% p (i=lr[ni])%p

0 ≤ l ≤ r ≤ n ≤ 1 0 18 0\leq l \leq r \leq n \leq 10^{18} 0lrn1018 p ≤ 1 0 6 p\leq 10^6 p106

题解

首先把问题转化成前缀和这就不用说了吧
总所周知,第一类斯特林数的生成函数
∑ i = 0 n [ n i ] x i = x n ‾ = ∏ i = 0 n − 1 ( x + i ) \sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i=x^{\overline{n}}=\prod_{i=0}^{n-1}(x+i) i=0n[ni]xi=xn=i=0n1(x+i)

那么在 % p \%p %p意义下可以写成 ∏ i = 0 n − 1 ( x + i ) = ∏ i = 0 n − 1 ( x + i % p ) \prod_{i=0}^{n-1}(x+i)=\prod_{i=0}^{n-1}(x+i\%p) i=0n1(x+i)=i=0n1(x+i%p)

n = d ⋅ p + r n=d\cdot p+r n=dp+r,则有

∏ i = 0 n − 1 ( x + i % p ) = ∏ k = 0 d − 1 ∏ i = 0 p − 1 ( x + i ) ⋅ ∏ i = 0 r − 1 ( x + i ) = [ ∏ i = 0 p − 1 ( x + i ) ] d ⋅ ∏ i = 0 r − 1 ( x + i ) \prod_{i=0}^{n-1}(x+i\%p)=\prod_{k=0}^{d-1}\prod_{i=0}^{p-1}(x+i)\cdot\prod_{i=0}^{r-1}(x+i)=\bigg[\prod_{i=0}^{p-1}(x+i)\bigg]^d\cdot\prod_{i=0}^{r-1}(x+i) i=0n1(x+i%p)=k=0d1i=0p1(x+i)i=0r1(x+i)=[i=0p1(x+i)]di=0r1(x+i)

∏ i = 0 p − 1 ( x + i ) \prod_{i=0}^{p-1}(x+i) i=0p1(x+i) % p \%p %p意义下是等于 x p − x x^p-x xpx的(考虑两个多项式的根都是 0 , 1 , ⋯   , p − 1 0,1,\cdots,p-1 0,1,,p1,并且最高项系数也相同),即:

∑ i = 0 n [ n i ] x i = x d [ x p − 1 − 1 ] d ⋅ ∏ i = 0 r − 1 ( x + i ) \sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i=x^d\bigg[x^{p-1}-1\bigg]^d\cdot\prod_{i=0}^{r-1}(x+i) i=0n[ni]xi=xd[xp11]di=0r1(x+i)

则左边的第 k k k项,则对应右边的 d + k ′ ( p − 1 ) + i d+k'(p-1)+i d+k(p1)+i的指数,其中 i = ( k − d ) % ( p − 1 ) , k ′ = ⌊ k − d p − 1 ⌋ i=(k-d)\%(p-1),k'=\lfloor\frac{k-d}{p-1}\rfloor i=(kd)%(p1),k=p1kd,即:
[ n k ] = ( − 1 ) d − k ′ ( d k ′ ) ⋅ [ r i ] \begin{bmatrix}n\\k\end{bmatrix}=(-1)^{d-k'}\binom{d}{k'} \cdot \begin{bmatrix}r\\i\end{bmatrix} [nk]=(1)dk(kd)[ri]
那么则有:
∑ k = 0 m [ n k ] = ∑ k = 0 m ( − 1 ) d − k ′ ( d k ′ ) ⋅ [ r i ] = ∑ i = 0 p − 2 [ r i ] ∑ k ′ = 0 ⌊ m − d − i p − 1 ⌋ ( − 1 ) d − k ′ ( d k ′ ) = ( − 1 ) d ∑ i = 0 p − 2 [ r i ] ∑ k ′ = 0 ⌊ m − d − i p − 1 ⌋ ( − 1 ) k ′ ( d k ′ ) \begin{aligned} \sum_{k=0}^{m}\begin{bmatrix}n\\k\end{bmatrix}&=\sum_{k=0}^{m}(-1)^{d-k'}\binom{d}{k'} \cdot \begin{bmatrix}r\\i\end{bmatrix}\\ &=\sum_{i=0}^{p-2}\begin{bmatrix}r\\i\end{bmatrix}\sum_{k'=0}^{\lfloor\frac{m-d-i}{p-1}\rfloor}(-1)^{d-k'}\binom{d}{k'} \\ &=(-1)^d\sum_{i=0}^{p-2}\begin{bmatrix}r\\i\end{bmatrix}\sum_{k'=0}^{\lfloor\frac{m-d-i}{p-1}\rfloor}(-1)^{k'}\binom{d}{k'} \end{aligned} k=0m[nk]=k=0m(1)dk(kd)[ri]=i=0p2[ri]k=0p1mdi(1)dk(kd)=(1)di=0p2[ri]k=0p1mdi(1)k(kd)

不难看出, ⌊ m − d − i p − 1 ⌋ \lfloor\frac{m-d-i}{p-1}\rfloor p1mdi其实只有两种取值,分别对应 i ∈ [ 0 , ⋯   , ( m − d ) % ( p − 1 ) ] i\in\Big[0,\cdots,(m-d)\%(p-1)\Big] i[0,,(md)%(p1)]以及 i ∈ ( ( m − d ) % ( p − 1 ) , p − 2 ] i\in\Big((m-d)\%(p-1),p-2\Big] i((md)%(p1),p2],分开这两段来求的话,现在的问题就变成了两个子问题:
1 、 ∑ i = 0 m [ n i ] , m ≤ n < p − 1 2 、 ∑ i = 0 m ( − 1 ) i ( n i ) , m ≤ n < 1 0 18 \begin{aligned} 1、&\sum_{i=0}^{m}\begin{bmatrix}n\\i\end{bmatrix}&,m\leq n<p-1 \\ 2、&\sum_{i=0}^{m}(-1)^i\binom{n}{i} &,m\leq n<10^{18} \end{aligned} 12i=0m[ni]i=0m(1)i(in),mn<p1,mn<1018


先说第二个, l u c a s lucas lucas定理告诉我们:
( n m ) % p = ( n / p m / p ) ⋅ ( n % p m % p ) % p \binom{n}{m}\%p=\binom{n/p}{m/p}\cdot\binom{n\%p}{m\%p}\%p (mn)%p=(m/pn/p)(m%pn%p)%p
所以在模意义下有:
∑ i = 0 m ( − 1 ) i ( n i ) = ∑ i = 0 m ( − 1 ) i ( n / p i / p ) ⋅ ( n % p i % p ) = ∑ k = 0 ⌊ m p ⌋ − 1 ( n / p k ) ∑ i = 0 p − 1 ( − 1 ) i ⋅ ( n % p i ) + ( n / p m / p ) ∑ i = 0 m % p ( − 1 ) i ⋅ ( n % p i ) \begin{aligned} \sum_{i=0}^{m}(-1)^i\binom{n}{i}&=\sum_{i=0}^{m}(-1)^i\binom{n/p}{i/p}\cdot\binom{n\%p}{i\%p}\\ &=\sum_{k=0}^{\lfloor\frac{m}{p}\rfloor-1}\binom{n/p}{k}\sum_{i=0}^{p-1}(-1)^i\cdot\binom{n\%p}{i}+\binom{n/p}{m/p}\sum_{i=0}^{m\%p}(-1)^i\cdot\binom{n\%p}{i} \end{aligned} i=0m(1)i(in)=i=0m(1)i(i/pn/p)(i%pn%p)=k=0pm1(kn/p)i=0p1(1)i(in%p)+(m/pn/p)i=0m%p(1)i(in%p)

注意 n % p ≤ p − 1 n\%p\leq p-1 n%pp1,所以:
∑ k = 0 ⌊ m p ⌋ − 1 ( n / p k ) ∑ i = 0 p − 1 ( − 1 ) i ⋅ ( n % p i ) + ( n / p m / p ) ∑ i = 0 m % p ( − 1 ) i ⋅ ( n % p i ) = ∑ k = 0 ⌊ m p ⌋ − 1 ( n / p k ) ∑ i = 0 n % p ( − 1 ) i ⋅ ( n % p i ) + ( n / p m / p ) ∑ i = 0 m % p ( − 1 ) i ⋅ ( n % p i ) = ∑ k = 0 ⌊ m p ⌋ − 1 ( n / p k ) ( 1 + ( − 1 ) ) n % p + ( n / p m / p ) ∑ i = 0 m % p ( − 1 ) i ⋅ ( n % p i ) = ( n / p m / p ) ∑ i = 0 m % p ( − 1 ) i ⋅ ( n % p i ) \begin{aligned} &\sum_{k=0}^{\lfloor\frac{m}{p}\rfloor-1}\binom{n/p}{k}\sum_{i=0}^{p-1}(-1)^i\cdot\binom{n\%p}{i}+\binom{n/p}{m/p}\sum_{i=0}^{m\%p}(-1)^i\cdot\binom{n\%p}{i}\\ =&\sum_{k=0}^{\lfloor\frac{m}{p}\rfloor-1}\binom{n/p}{k}\sum_{i=0}^{n\%p}(-1)^i\cdot\binom{n\%p}{i}+\binom{n/p}{m/p}\sum_{i=0}^{m\%p}(-1)^i\cdot\binom{n\%p}{i}\\ =&\sum_{k=0}^{\lfloor\frac{m}{p}\rfloor-1}\binom{n/p}{k}(1+(-1))^{n\%p}+\binom{n/p}{m/p}\sum_{i=0}^{m\%p}(-1)^i\cdot\binom{n\%p}{i}\\ =&\binom{n/p}{m/p}\sum_{i=0}^{m\%p}(-1)^i\cdot\binom{n\%p}{i}\\ \end{aligned} ===k=0pm1(kn/p)i=0p1(1)i(in%p)+(m/pn/p)i=0m%p(1)i(in%p)k=0pm1(kn/p)i=0n%p(1)i(in%p)+(m/pn/p)i=0m%p(1)i(in%p)k=0pm1(kn/p)(1+(1))n%p+(m/pn/p)i=0m%p(1)i(in%p)(m/pn/p)i=0m%p(1)i(in%p)

这样子就可以 O ( p ) O(p) O(p)算了(题解使用了一种更为普适的方法,有兴趣的读者可以去看题解)


 接下来说怎么算 ∑ i = 0 m [ n i ] , m ≤ n < p − 1 \sum_{i=0}^{m}\begin{bmatrix}n\\i\end{bmatrix},m\leq n<p-1 i=0m[ni],mn<p1,虽然n的范围已经降到1e6,但是第一类斯特林数并没有特别显式的公式,最多只有 ∑ i = 0 n [ n i ] x i = x n ‾ = ∏ i = 0 n − 1 ( x + i ) \sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i=x^{\overline{n}}=\prod_{i=0}^{n-1}(x+i) i=0n[ni]xi=xn=i=0n1(x+i),常数小的选手可以尝试暴力分治FFT,标程就是这样 O ( n l o g n ) O(nlogn) O(nlogn)冲过去的,但我是大常数选手被卡也很正常,不过还有另外一种更为数学的方法——反演。

根据第一类斯特林的生成函数,可以写出下面的矩阵(为了排版好看,就用 S 1 ( n , i ) S_1(n,i) S1(n,i)来代替 [ n i ] \begin{bmatrix}n\\i\end{bmatrix} [ni]

[ x 0 0 x 0 1 x 0 2 ⋯ x 0 p − 1 x 1 0 x 1 1 x 1 2 ⋯ x 1 p − 1 x 2 0 x 2 1 x 2 2 ⋯ x 2 p − 1 ⋮ ⋮ ⋮ ⋱ ⋮ x p − 1 0 x p − 1 1 x p − 1 2 ⋯ x p − 1 p − 1 ] ⋅ [ S 1 ( n , 0 ) S 1 ( n , 1 ) S 1 ( n , 2 ) ⋮ S 1 ( n , p − 1 ) ] = [ x 0 n ‾ x 1 n ‾ x 2 n ‾ ⋮ x p − 1 n ‾ ] \begin{bmatrix} {x_0}^0 & {x_0}^1 & {x_0}^2 & \cdots & {x_0}^{p-1}\\ {x_1}^0 & {x_1}^1 & {x_1}^2 & \cdots & {x_1}^{p-1}\\ {x_2}^0 & {x_2}^1 & {x_2}^2 & \cdots & {x_2}^{p-1}\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ {x_{p-1}}^0 & {x_{p-1}}^1 & {x_{p-1}}^2 & \cdots & {x_{p-1}}^{p-1}\\ \end{bmatrix}\cdot \begin{bmatrix} S_1(n,0)\\ S_1(n,1)\\ S_1(n,2)\\ \vdots\\ S_1(n,p-1) \end{bmatrix}= \begin{bmatrix} {x_0}^{\overline{n}} \\ {x_1}^{\overline{n}}\\ {x_2}^{\overline{n}}\\ \vdots\\ {x_{p-1}}^{\overline{n}} \end{bmatrix} x00x10x20xp10x01x11x21xp11x02x12x22xp12x0p1x1p1x2p1xp1p1S1(n,0)S1(n,1)S1(n,2)S1(n,p1)=x0nx1nx2nxp1n

这就是用斯特林数算上升幂的直接应用嘛。
又因为 S 1 ( n , 0 ) = 0 S_1(n,0)=0 S1(n,0)=0,可以直接去掉对应矩阵的列:
[ x 1 1 x 1 2 x 1 3 ⋯ x 1 p − 1 x 2 1 x 2 2 x 2 3 ⋯ x 2 p − 1 x 3 1 x 3 2 x 3 3 ⋯ x 3 p − 1 ⋮ ⋮ ⋮ ⋱ ⋮ x p − 1 1 x p − 1 2 x p − 1 3 ⋯ x p − 1 p − 1 ] ⋅ [ S 1 ( n , 1 ) S 1 ( n , 2 ) S 1 ( n , 3 ) ⋮ S 1 ( n , p − 1 ) ] = [ x 1 n ‾ x 2 n ‾ x 3 n ‾ ⋮ x p − 1 n ‾ ] \begin{bmatrix} {x_1}^1 & {x_1}^2 & {x_1}^3 & \cdots & {x_1}^{p-1}\\ {x_2}^1 & {x_2}^2 & {x_2}^3 & \cdots & {x_2}^{p-1}\\ {x_3}^1 & {x_3}^2 & {x_3}^3 & \cdots & {x_3}^{p-1}\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ {x_{p-1}}^1 & {x_{p-1}}^2 & {x_{p-1}}^3 & \cdots & {x_{p-1}}^{p-1}\\ \end{bmatrix}\cdot \begin{bmatrix} S_1(n,1)\\ S_1(n,2)\\ S_1(n,3)\\ \vdots\\ S_1(n,p-1) \end{bmatrix}= \begin{bmatrix} {x_1}^{\overline{n}}\\ {x_2}^{\overline{n}}\\ {x_3}^{\overline{n}}\\ \vdots\\ {x_{p-1}}^{\overline{n}} \end{bmatrix} x11x21x31xp11x12x22x32xp12x13x23x33xp13x1p1x2p1x3p1xp1p1S1(n,1)S1(n,2)S1(n,3)S1(n,p1)=x1nx2nx3nxp1n

那么我们随便找几个数,O(n^3)高斯消元就能解出S1(n,i)了
看这个矩阵的形式,是不是感觉很眼熟,有点像 F F T FFT FFT的转移矩阵,那我们干脆一不做二不休,直接选择 x i = g i x_i=g^i xi=gi好了:

[ g 1 g 2 g 3 ⋯ g ( p − 1 ) g 2 g 4 g 6 ⋯ g 2 ( p − 1 ) g 3 g 6 g 9 ⋯ g 3 ( p − 1 ) ⋮ ⋮ ⋱ ⋮ g ( p − 1 ) g 2 ( p − 1 ) g 3 ( p − 1 ) ⋯ g ( p − 1 ) ( p − 1 ) ] ⋅ [ S 1 ( n , 1 ) S 1 ( n , 2 ) S 1 ( n , 3 ) ⋮ S 1 ( n , ( p − 1 ) ) ] = [ g n ‾ ( g 2 ) n ‾ ( g 3 ) n ‾ ⋮ ( g ( p − 1 ) ) n ‾ ] \begin{bmatrix} g^1 & g^2 & g^3 & \cdots & g^{(p-1)}\\ g^2 & g^4 & g^6 & \cdots & g^{2(p-1)}\\ g^3 & g^6 & g^9 & \cdots & g^{3(p-1)}\\ \vdots & \vdots & \ddots & \vdots\\ g^{(p-1)} & g^{2(p-1)} & g^{3(p-1)} &\cdots & g^{(p-1)(p-1)} \end{bmatrix}\cdot \begin{bmatrix} S_1(n,1)\\ S_1(n,2)\\ S_1(n,3)\\ \vdots\\ S_1(n,(p-1)) \end{bmatrix}= \begin{bmatrix} g^{\overline{n}} \\ ({g^2})^{\overline{n}}\\ (g^3)^{\overline{n}}\\ \vdots\\ (g^{(p-1)})^{\overline{n}} \end{bmatrix} g1g2g3g(p1)g2g4g6g2(p1)g3g6g9g3(p1)g(p1)g2(p1)g3(p1)g(p1)(p1)S1(n,1)S1(n,2)S1(n,3)S1(n,(p1))=gn(g2)n(g3)n(g(p1))n

简写成:

G S = V GS=V GS=V

根据 F F T FFT FFT我们知道,如果 g g g p p p的原根的话, G G G是有逆矩阵的,即:
S = G − 1 V S=G^{-1}V S=G1V

具体就是:

1 p − 1 [ g − 1 g − 2 g − 3 ⋯ g − ( p − 1 ) g − 2 g − 4 g − 6 ⋯ g − 2 ( p − 1 ) g − 3 g − 6 g − 9 ⋯ g − 3 ( p − 1 ) ⋮ ⋮ ⋱ ⋮ g − ( p − 1 ) g − 2 ( p − 1 ) g − 3 ( p − 1 ) ⋯ g − ( p − 1 ) ( p − 1 ) ] ⋅ [ g n ‾ ( g 2 ) n ‾ ( g 3 ) n ‾ ⋮ ( g ( p − 1 ) ) n ‾ ] = [ S 1 ( n , 1 ) S 1 ( n , 2 ) S 1 ( n , 3 ) ⋮ S 1 ( n , ( p − 1 ) ) ] \frac{1}{p-1} \begin{bmatrix} g^{-1} & g^{-2} & g^{-3} & \cdots & g^{-(p-1)}\\ g^{-2} & g^{-4} & g^{-6} & \cdots & g^{-2(p-1)}\\ g^{-3} & g^{-6} & g^{-9} & \cdots & g^{-3(p-1)}\\ \vdots & \vdots & \ddots & \vdots\\ g^{-(p-1)} & g^{-2(p-1)} & g^{-3(p-1)} &\cdots & g^{-(p-1)(p-1)} \end{bmatrix}\cdot \begin{bmatrix} g^{\overline{n}} \\ ({g^2})^{\overline{n}}\\ (g^3)^{\overline{n}}\\ \vdots\\ (g^{(p-1)})^{\overline{n}} \end{bmatrix}= \begin{bmatrix} S_1(n,1)\\ S_1(n,2)\\ S_1(n,3)\\ \vdots\\ S_1(n,(p-1)) \end{bmatrix} p11g1g2g3g(p1)g2g4g6g2(p1)g3g6g9g3(p1)g(p1)g2(p1)g3(p1)g(p1)(p1)gn(g2)n(g3)n(g(p1))n=S1(n,1)S1(n,2)S1(n,3)S1(n,(p1))

即:
S 1 ( n , i ) = ∑ j = 1 p − 1 g − i j ⋅ ( g j ) n ‾ \begin{aligned} S_1(n,i)&=\sum_{j=1}^{p-1}g^{-ij}\cdot(g^j)^{\overline{n}}\\ \end{aligned} S1(n,i)=j=1p1gij(gj)n

接着求前缀和:
∑ i = 1 m S 1 ( n , i ) = ∑ i = 1 m ∑ j = 1 p − 1 g − i j ⋅ ( g j ) n ‾ = ∑ j = 1 p − 1 ( g j ) n ‾ ∑ i = 1 m g − i j = ∑ j = 1 p − 1 ( g j ) n ‾ ⋅ [ g j = 1 ? m : g − j ( m + 1 ) − g − j g − j − 1 ] \begin{aligned} \sum_{i=1}^{m}S_1(n,i)&=\sum_{i=1}^{m}\sum_{j=1}^{p-1}g^{-ij}\cdot(g^j)^{\overline{n}}\\ &=\sum_{j=1}^{p-1}(g^j)^{\overline{n}}\sum_{i=1}^{m}g^{-ij}\\ &=\sum_{j=1}^{p-1}(g^j)^{\overline{n}}\cdot\Big[g^j=1?m:\frac{g^{-j(m+1)}-g^{-j}}{g^{-j}-1}\Big] \end{aligned} i=1mS1(n,i)=i=1mj=1p1gij(gj)n=j=1p1(gj)ni=1mgij=j=1p1(gj)n[gj=1?m:gj1gj(m+1)gj]

上升幂可以用阶乘来算,所以这样的复杂度是 O ( p ) O(p) O(p),总复杂度也为 O ( p ) O(p) O(p)比题解不知道要高多少倍

#include<bits/stdc++.h>
#define maxn 2000050
using namespace std;
typedef long long LL;

LL n,l,r,modu;

void add(LL &a,LL b)    {   a=(a+b)%modu;   }
void sub(LL &a,LL b)    {   a=(a-b%modu+modu)%modu;  }
void mul(LL &a,LL b)    {   a=a*b%modu; }

LL pw(LL a,LL k=modu-2)   {
    LL ans=1;
    for (a%=modu;k;k>>=1)  {
        if (k&1)
            ans=ans*a%modu;
        a=a*a%modu;
    }
    return ans;
}

LL F[maxn],I[maxn];

LL sgn(LL x)    {   
    return x&1?modu-1:1;
}

LL C(LL n,LL m) {
    if (!n&&!m) return 1;
    LL _n=n%modu,_m=m%modu;
    LL ans=_n<_m?0:F[_n]*I[_m]%modu*I[_n-_m]%modu;
    return ans*C(n/modu,m/modu);
}

int g;

vector<int> factor(LL x)    {
    vector<int> F;
    for (int i=2;i<=x;++i)  {
        if (x%i) continue;
        while (x%i==0) x/=i;
        F.push_back(i);
    }
    return F;
}

void predo()    {
    for (int i=F[0]=I[0]=I[1]=1;i<modu;++i) F[i]=F[i-1]*i%modu;
    for (int i=2;i<modu;++i)    I[i]=modu-modu/i*I[modu%i]%modu;
    for (int i=1;i<modu;++i)    I[i]=I[i-1]*I[i]%modu;

    auto F=factor(modu-1);
    for (g=2;;++g)  {
        bool flag=1;
        for (LL x:F)
            flag&=(pw(g,(modu-1)/x)!=1);
        if (flag) break;
    }
}

LL sum_Stiriling(LL n,LL m) {
    m=min(n,m);
    LL ans=0;
    for (int j=1;j<modu;++j)    {
        auto sum=[&](LL x,LL m)    {
            if (x==1)
                return m%modu;
            else    
                return (pw(x,m+1)-x+modu)*pw(x-1+modu)%modu;
        };
        auto upow=[&](LL x,LL n)    {
            return F[x+n-1]*I[x-1]%modu;
        };
        LL x=pw(g,j);
        add(ans,upow(x,n)*sum(pw(x),m));
    }
    return (modu-ans)%modu;
}

LL sum_Binomial(LL n,LL m) {//with (-1)^i
    if (m<0) return 0;
    LL ans=0;
    for (int i=0;i<=m%modu;++i)
        add(ans,C(n%modu,i)*sgn(i));
    return ans*C(n/modu,m/modu)%modu*sgn(m/modu);
}

LL solve(LL n,LL m)   {
    LL _n=n%modu;
    if (m<=n/modu) return 0;
    LL _m=m-n/modu,x=_m/(modu-1);

    LL ans=sum_Binomial(n/modu,x-1)*F[_n]+sum_Stiriling(_n,_m%(modu-1))*C(n/modu,x)%modu*sgn(x);
    ans%=modu;
    return ans*sgn(n/modu)%modu;
}

int main()  {
    scanf("%lld%lld%lld%lld",&n,&l,&r,&modu);
    predo();
    printf("%lld\n",(solve(n,r)-solve(n,l-1)+modu)%modu);
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值