Mobius反演和筛法

前置知识:积性函数、Dirichlet卷积、莫比乌斯函数、数论分块

积性函数

定义

1、若f(n)的定义域为正整数域,值域为复数,即f: Z^+ →C,则f(n)为数论函数;

2、若f(n)为数论函数,且f(1)=1,对于互质的正整数p,q有f(p∗q)=f(p)∗f(q)f(p*q) = f(p) * f(q)f(p∗q)=f(p)∗f(q),则称其为积性函数;

3、若f(n)为积性函数,且对于任意正整数p,q都有f(p∗q)=f(p)∗f(q)f(p*q) = f(p) * f(q)f(p∗q)=f(p)∗f(q),则称其为完全积性函数。

性质
h(x)=f(xp)h(x)=fp(x)h(x)=f(x)g(x)h(x)=∑d∣xf(d)g(xd)\begin{aligned} h(x)&=f(x^p)\\ h(x)&=f^p(x)\\ h(x)&=f(x)g(x)\\ h(x)&=\sum_{d\mid x}f(d)g(\frac{x}{d}) \end{aligned} h(x)h(x)h(x)h(x)​=f(xp)=fp(x)=f(x)g(x)=d∣x∑​f(d)g(dx​)​

例子

–单位函数:Ɛ(n) = [n=1]

–常数函数:1(n)=1

–欧拉函数:φ(n)=∑i=1n[gcd⁡(i,n)=1]\varphi(n) = \sum_{i=1}^n[\gcd(i,n)=1]φ(n)=∑i=1n​[gcd(i,n)=1]

–除数函数:σ(n)\sigma(n)σ(n)=所有n的正因子之和

莫尼乌斯函数

定义
μ(n)={1,n=10,∃d>1,d2∣n(−1)ω(n),otherwise\mu(n)= \begin{cases} 1, & n=1\\ 0, & \exists d>1, d^{2} \mid n\\ (-1)^{\omega(n)}, & \texttt{otherwise} \end{cases} μ(n)=⎩⎪⎨⎪⎧​1,0,(−1)ω(n),​n=1∃d>1,d2∣notherwise​

性质
∑d∣nμ(d)={1,n=10,n≠1\sum_{d\mid n}\mu(d) = \begin{cases} 1 ,&n = 1\\ 0, &n\neq 1\\ \end{cases} d∣n∑​μ(d)={1,0,​n=1n​=1​

线性筛求莫比乌斯函数

void getMu() {mu[1] = 1;for (int i = 2; i <= n; ++i) {if (!flg[i]) p[++tot] = i, mu[i] = -1;for (int j = 1; j <= tot && i * p[j] <= n; ++j) {flg[i * p[j]] = 1;if (i % p[j] == 0) {mu[i * p[j]] = 0;break;}mu[i * p[j]] = -mu[i];}}
}

Dirichlet卷积

定义:对两个数论函数f和g,其狄利克雷卷积为f∗gf*gf∗g,其中f(n)∗g(n)=∑d∣nf(d)g(n/d)f(n)*g(n) = \sum_{d\mid n}f(d)g(n/d)f(n)∗g(n)=∑d∣n​f(d)g(n/d) 。

性质:交换律,结合律,分配律,逆元,单位元(所以这是一个群)

重要结论

–两个积性函数的Dirichlet卷积也是积性函数

–Dirichlet卷积可以用O(nlogn)的筛法预处理出来

–∑d∣nμ(d)=[n==1]\sum_{d\mid n}\mu(d)=[n==1]∑d∣n​μ(d)=[n==1],即1∗μ=ε1*\mu=\varepsilon1∗μ=ε

–∑d∣nΦ(d)=n\sum_{d\mid n}\Phi(d)=n∑d∣n​Φ(d)=n,即1∗Φ=id1*\Phi=id1∗Φ=id

莫尼乌斯反演:莫比乌斯反演是数论中的重要内容。对于一些函数f(n),如果很难直接求出它的值,而容易求出其倍数和约数和g(n),那么可以通过莫比乌斯反演简化运算,从而求得f(n)的值。

内容

设f(n) ,g(n)都是数论函数。

如果f(n) = ∑d∣ng(d)\sum_{d\mid n}g(d)∑d∣n​g(d),则有g(x)=∑d∣nμ(d∣n)f(d)g(x)=\sum_{d\mid n}\mu(d\mid n)f(d)g(x)=∑d∣n​μ(d∣n)f(d)。

如果f(n) = ∑n∣dg(d)\sum_{n\mid d}g(d)∑n∣d​g(d),则有g(n)=∑n∣dμ(d∣n)f(d)g(n)=\sum_{n\mid d}\mu(d\mid n)f(d)g(n)=∑n∣d​μ(d∣n)f(d)。

例题

luogu_p2522luogu\_p2522luogu_p2522

∑i=xn∑j=ym[gcd⁡(i,j)=k](1⩽T,x,y,n,m,k⩽5×104)\sum_{i=x}^n\sum_{j=y}^m[\gcd(i,j)=k] \qquad (1\leqslant T,x,y,n,m,k \leqslant 5\times 10^4) i=x∑n​j=y∑m​[gcd(i,j)=k](1⩽T,x,y,n,m,k⩽5×104)
用容斥原理,将原式分成4块处理,每一块都为
∑i=1n∑j=1m[gcd⁡(i,j)=k]\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k] i=1∑n​j=1∑m​[gcd(i,j)=k]
化简得
∑i=1⌊nk⌋∑j=1⌊mk⌋ε(gcd⁡(i,j))\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\varepsilon(\gcd(i,j)) i=1∑⌊kn​⌋​j=1∑⌊km​⌋​ε(gcd(i,j))
因为ε=1∗μ\varepsilon=1*\muε=1∗μ,
∑i=1⌊nk⌋∑j=1⌊mk⌋∑d∣gcd⁡(i,j)μ(d)\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\sum_{d\mid \gcd(i,j)}\mu(d) i=1∑⌊kn​⌋​j=1∑⌊km​⌋​d∣gcd(i,j)∑​μ(d)
改变求和顺序,得
∑d=1μ(d)∑i=1⌊nk⌋[d∣i]∑j=1⌊mk⌋[d∣j]\sum_{d=1}\mu(d)\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}[d\mid i]\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[d\mid j] d=1∑​μ(d)i=1∑⌊kn​⌋​[d∣i]j=1∑⌊km​⌋​[d∣j]
对后两项单独求和,原式就是,
∑d=1μ(d)⌊nkd⌋⌊mkd⌋\sum_{d=1}\mu(d)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor d=1∑​μ(d)⌊kdn​⌋⌊kdm​⌋
最后用数论分块处理。

#include <algorithm>
#include <cstdio>
const int N = 50000;
int mu[N + 5], p[N + 5];
bool flg[N + 5];
void init() {int tot = 0;mu[1] = 1;for (int i = 2; i <= N; ++i) {if (!flg[i]) {p[++tot] = i;mu[i] = -1;}for (int j = 1; j <= tot && i * p[j] <= N; ++j) {flg[i * p[j]] = 1;if (i % p[j] == 0) {mu[i * p[j]] = 0;break;}mu[i * p[j]] = -mu[i];}}for (int i = 1; i <= N; ++i) mu[i] += mu[i - 1];
}
int solve(int n, int m) {int res = 0;for (int i = 1, j; i <= std::min(n, m); i = j + 1) {j = std::min(n / (n / i), m / (m / i));res += (mu[j] - mu[i - 1]) * (n / i) * (m / i);}return res;
}
int main() {int T, a, b, c, d, k;init();for (scanf("%d", &T); T; --T) {scanf("%d%d%d%d%d", &a, &b, &c, &d, &k);printf("%d\n", solve(b / k, d / k) - solve(b / k, (c - 1) / k) -solve((a - 1) / k, d / k) +solve((a - 1) / k, (c - 1) / k));}return 0;
}

HDU6833

原式
∑a1=1n∑a2=1n...∑ax(∏j=1najk)f(gcd⁡(a1,a2...ax))gcd⁡(a1,a2...ax)\sum_{a_1=1}^n\sum_{a_2=1}^n...\sum_{a_x}(\prod^n_{j=1}a_j^k)f(\gcd(a_1,a_2...a_x))\gcd(a_1,a_2...a_x) a1​=1∑n​a2​=1∑n​...ax​∑​(j=1∏n​ajk​)f(gcd(a1​,a2​...ax​))gcd(a1​,a2​...ax​)
令gcd⁡(a1,a2...ax)=d\gcd(a_1,a_2...a_x)=dgcd(a1​,a2​...ax​)=d,枚举d
∑d=1nf(d)∑a1=1n∑a2=1n...∑ax=1n(∏j=1najk)[gcd⁡(a1,a2...ax)=d]\sum_{d=1}^nf(d)\sum_{a_1=1}^n\sum_{a_2=1}^n...\sum_{a_x=1}^n(\prod^n_{j=1}a_j^k)[\gcd(a_1,a_2...a_x)=d] d=1∑n​f(d)a1​=1∑n​a2​=1∑n​...ax​=1∑n​(j=1∏n​ajk​)[gcd(a1​,a2​...ax​)=d]
将gcd⁡\gcdgcd化为1,且对gcd⁡\gcdgcd反演,得
∑d=1nf(d)dkx+1∑a1=1n∣d∑a2=1n∣d...∑an=1n∣d(∏j=1najk)∑t∣a1,t∣a2...μ(t)\sum_{d=1}^nf(d)d^{kx+1}\sum_{a_1=1}^{n\mid d}\sum_{a_2=1}^{n\mid d}...\sum_{a_n=1}^{n\mid d}(\prod_{j=1}^na_j^k)\sum_{t\mid a_1,t\mid a_2...}\mu(t) d=1∑n​f(d)dkx+1a1​=1∑n∣d​a2​=1∑n∣d​...an​=1∑n∣d​(j=1∏n​ajk​)t∣a1​,t∣a2​...∑​μ(t)
枚举t,得
∑d=1nf(d)dkx+1∑t=1n∣dμ(t)tkx∑a1=1n∣td∑a2=1n∣td...∑ax=1n∣td(∏j=1najk)=∑d=1nf(d)dkx+1∑t=1n∣dμ(t)tkx(∑j=1n∣tdjk)x\sum_{d=1}^nf(d)d^{kx+1}\sum_{t=1}^{n\mid d}\mu(t)t^{kx}\sum_{a_1=1}^{n\mid td}\sum_{a_2=1}^{n\mid td}...\sum_{a_x=1}^{n\mid td}(\prod_{j=1}^na_j^k)\\ =\sum_{d=1}^nf(d)d^{kx+1}\sum_{t=1}^{n\mid d}\mu(t)t^{kx}(\sum_{j=1}^{n\mid td}j^k)^x d=1∑n​f(d)dkx+1t=1∑n∣d​μ(t)tkxa1​=1∑n∣td​a2​=1∑n∣td​...ax​=1∑n∣td​(j=1∏n​ajk​)=d=1∑n​f(d)dkx+1t=1∑n∣d​μ(t)tkx(j=1∑n∣td​jk)x
令T=tdT=tdT=td,枚举T
∑T=1nTkx(∑j=1n∣Tjk)x∑d∣Tf(d)dμ(T∣d)\sum_{T=1}^n{T^{kx}}(\sum_{j=1}^{n\mid T}j^k)^x\sum_{d\mid T}f(d)d\mu(T\mid d) T=1∑n​Tkx(j=1∑n∣T​jk)xd∣T∑​f(d)dμ(T∣d)
令h(T)=∑d∣Tf(d)dμ(T∣d)h(T)=\sum_{d\mid T}f(d)d\mu(T\mid d)h(T)=∑d∣T​f(d)dμ(T∣d),得到
∑T=1nTkxh(T)(∑j=1n∣Tjk)x\sum_{T=1}^nT^{kx}h(T)(\sum_{j=1}^{n\mid T}j^k)^x T=1∑n​Tkxh(T)(j=1∑n∣T​jk)x
预处理出∑T=1nTkxh(T)\sum_{T=1}^nT^{kx}h(T)∑T=1n​Tkxh(T)的前缀和和∑j=1n∣Tjk\sum_{j=1}^{n\mid T}j^k∑j=1n∣T​jk的值,最终用整数分块就可以写了。


杜教筛

杜教筛常用于计算积性函数前缀和:对于积性函数f(n),求前缀和f(n)=∑k=1nf(k)f(n)=\sum_{k=1}^nf(k)f(n)=∑k=1n​f(k)。

关键在于选定一个好的辅助函数g(n),并进行合适的数论变换。

这里尝试计算f*g的前缀和:
∑k=1n(f∗g)(k)=∑k=1n∑d∣kf(kd)g(d)=∑d=1ng(d)∑k=1⌊n∣d⌋f(k)=∑k=1ng(k)F(⌊nk⌋)\sum_{k=1}^n(f*g)(k)=\sum_{k=1}^n\sum_{d\mid k}f(\frac{k}{d})g(d)\\ =\sum_{d=1}^ng(d)\sum_{k=1}^{\lfloor{n\mid d}\rfloor}f(k)\\ =\sum_{k=1}^ng(k)F(\lfloor\frac{n}{k}\rfloor) k=1∑n​(f∗g)(k)=k=1∑n​d∣k∑​f(dk​)g(d)=d=1∑n​g(d)k=1∑⌊n∣d⌋​f(k)=k=1∑n​g(k)F(⌊kn​⌋)
将g(1)F(n)g(1)F(n)g(1)F(n)移出来,得
F(n)=1g(1)(∑k=1n(f∗g)(k)−∑k=2ng(k)F(⌊nk⌋))F(n)=\frac{1}{g(1)}(\sum_{k=1}^n(f*g)(k)-\sum_{k=2}^ng(k)F(\lfloor\frac{n}{k}\rfloor)) F(n)=g(1)1​(k=1∑n​(f∗g)(k)−k=2∑n​g(k)F(⌊kn​⌋))
这样就求得了前缀和F(n),而如果我们可以在:
1.快速计算∑k=1n(f∗g)(k)2.快速计算∑k=1ng(k).1.快速计算\sum_{k=1}^n(f*g)(k)\\ 2.快速计算\sum_{k=1}^ng(k). 1.快速计算k=1∑n​(f∗g)(k)2.快速计算k=1∑n​g(k).
那么我们就可以在比较低的时间复杂度计算F(n)。

时间复杂度

对于F(n)=1g(1)(∑k=1n(f∗g)(k)−∑k=2ng(k)F(⌊nk⌋))F(n)=\frac{1}{g(1)}(\sum_{k=1}^n(f*g)(k)-\sum_{k=2}^ng(k)F(\lfloor\frac{n}{k}\rfloor))F(n)=g(1)1​(∑k=1n​(f∗g)(k)−∑k=2n​g(k)F(⌊kn​⌋))的括号中的两项,假如可以快速求和(f∗g)(i)(f*g)(i)(f∗g)(i)和g(i)g(i)g(i),那么根据数论分块,整个过程的时间复杂度为:
∑i=1⌊n⌋O(i)+∑i=1⌊n⌋O(ni)\sum_{i=1}^{\lfloor\sqrt n\rfloor}O(\sqrt i)+ \sum_{i=1}^{\lfloor\sqrt n\rfloor}O(\sqrt{\frac{n}{i}}) i=1∑⌊n​⌋​O(i​)+i=1∑⌊n​⌋​O(in​​)
后一项复杂度大于前一项,只考虑后一项:
∑i=1⌊n⌋O(ni)≈O(∫Onnkdx)=O(n34)\sum_{i=1}^{\lfloor\sqrt n\rfloor}O(\sqrt{\frac{n}{i}})\approx O(\int_O^{\sqrt {n}}\sqrt{\frac{n}{k}}dx)=O(n^{\frac{3}{4}}) i=1∑⌊n​⌋​O(in​​)≈O(∫On​​kn​​dx)=O(n43​)


杜教筛模板题

求∑i=1nμ(i)\sum_{i=1}^{n}\mu(i)∑i=1n​μ(i)

根据前面推导,可以得到该递推式
S(n)=∑i=1nε(i)−∑i=2nS(⌊nk⌋)=1−∑i=2nS(⌊nk⌋)S(n)=\sum_{i=1}^n\varepsilon(i)-\sum_{i=2}^nS(\lfloor\frac{n}{k}\rfloor)=1-\sum_{i=2}^nS(\lfloor\frac{n}{k}\rfloor) S(n)=i=1∑n​ε(i)−i=2∑n​S(⌊kn​⌋)=1−i=2∑n​S(⌊kn​⌋)
直接用数论分块计算,时间复杂度为O(n3∣4)O(n^{3\mid 4})O(n3∣4),可以考虑用线性筛预处理前n2∣3n^{2\mid 3}n2∣3项,那么递推部分的时间复杂度为O(∫0n13nkdx)=O(n23)O(\int_0^{n^{\frac{1}{3}}}\sqrt{\frac{n}{k}}dx) = O(n^{\frac{2}{3}})O(∫0n31​​kn​​dx)=O(n32​)。

那么结合了线性筛的部分,总的时间复杂度为O(n23)O(n^{\frac{2}{3}})O(n32​)。

min_25

min_25min\_25min_25也是求积性函数的前缀和,但是时间复杂度为亚线性时间范围内。

比如求F(n)=∑i=1nf(i)F(n)=\sum_{i=1}^nf(i)F(n)=∑i=1n​f(i);

但是需要满足以下条件:
x为质数时,f(x)可以表示为一个多项式f(pk)较易求得f(x)为一个积性函数x为质数时,f(x)可以表示为一个多项式\\ f(p^k)较易求得\\ f(x)为一个积性函数\\ x为质数时,f(x)可以表示为一个多项式f(pk)较易求得f(x)为一个积性函数
先把1拿掉,因为1不是质数也不是合数,会影响后面的计算,最后只需要加回来就好了。

对于∑i=1nf(i)\sum_{i=1}^nf(i)∑i=1n​f(i),考虑将其拆分成两部分进行运算,一部分为质数,一部分为合数。

即得到下列式子:
∑i∈Pf(i)+∑pe≤n,p≤nf(pe)(∑i≤⌊npe⌋,minp(i)>pf(i))\sum_{i\in P}f(i)+\sum_{p^e\leq n,p\leq \sqrt n}f(p^e)(\sum_{i\leq \lfloor\frac{n}{p^e}\rfloor,minp(i)>p}f(i)) i∈P∑​f(i)+pe≤n,p≤n​∑​f(pe)(i≤⌊pen​⌋,minp(i)>p∑​f(i))
将质数和合数分开计算,定义一个函数:
g(n,k)=∑i≤n,minp<pkΛi∈Pf′(i)g(n,k) = \sum_{i \leq {n}, \text minp < p_{k} \Lambda {i} \in P}f'(i) g(n,k)=i≤n,minp<pk​Λi∈P∑​f′(i)
即2~n中质数或最小质因子大于pkp_kpk​的合数的f′f'f′的和。f′f'f′代表在质数处和fff相等的一个完全积性函数。

现在假设我们有了g(n,k−1)g(n,k-1)g(n,k−1),考虑如何得到g(n,k)g(n,k)g(n,k),分析两者的关系,后者相对于前者,少了某些数,这些数是最小质因子是pkp_kpk​的合数。

提出一个pkp_kpk​,则剩下的数的f′f'f′的和是:
g(⌊npk⌋,k−1)−g(pk−1,k−1)g(\lfloor\frac{n}{p_k}\rfloor,k-1)-g(p_{k-1},k-1) g(⌊pk​n​⌋,k−1)−g(pk−1​,k−1)
后一项可以写成∑i=1k−1[i∈P]f′\sum_{i=1}^{k-1}[i\in P]f'∑i=1k−1​[i∈P]f′,因为在前一项等于少了的那些数,加上后一项。

所以得到状态转移方程
g(n,k)=g(n,k−1)−f′(pk)(g(⌊npk⌋,k−1)−g(pk−1,k−1))g(n,k)=g(n,k-1)-f'(p_k)(g(\lfloor\frac{n}{p_k}\rfloor,k-1)-g(p_{k-1},k-1)) g(n,k)=g(n,k−1)−f′(pk​)(g(⌊pk​n​⌋,k−1)−g(pk−1​,k−1))
计算这个式子,借助数论分块,可以在O(n∗∣P∣)O(\sqrt n * |P|)O(n​∗∣P∣)内完成。

最后考虑如何借助ggg得到答案,但是现在还是需要另一个辅助数组。
S(n,k)=∑i=1n[minp(i)>Pk]f(i)S(n,k)=\sum_{i=1}^n[minp(i)>P_k]f(i) S(n,k)=i=1∑n​[minp(i)>Pk​]f(i)
分质数和合数两部分计算:
S(n,x)=g(n,∣P∣)−∑i=1xf(Pi)+∑pke≤n,k≤xf(pke)(h(⌊npke⌋,k)+[e≠1])S(n,x)=g(n,|P|)-\sum_{i=1}^xf(P_i)+\sum_{p_k^e\leq n,k\leq x}f(p_k^e)(h(\lfloor\frac{n}{p_k^e}\rfloor,k)+[e\neq1]) S(n,x)=g(n,∣P∣)−i=1∑x​f(Pi​)+pke​≤n,k≤x∑​f(pke​)(h(⌊pke​n​⌋,k)+[e​=1])
前两项是质数部分,后面的累加式是枚举合数的最小质因子PkP_kPk​和它的次数e。

S(n,0)S(n,0)S(n,0)就是最终答案,记住把一开始删掉的1加回来。

时间复杂度为O(n34logn)O(\frac {n^{\frac{3}{4}}}{logn})O(lognn43​​).

hdu6889[2020CCPC预选赛][1]

This class is on graph theory. Mr. Kruskal teaches babies the concept of minimal spanning tree, and how to calculate the minimal spanning tree of a given graph.Now, it's time for an in-class quizz. Mr. Kruskal shows a special graph G: G is a complete undirected graph with n vertices, and vertices in G are indexed from 1 to n. The weight of the edge between the ith vertex and the jth vertex is equal to lcm(i+1,j+1). Babies are asked to find the minimal spanning tree of G.As a super baby, Baby Volcano quickly finds an answer, but he is not sure on the correctness of his answer. Your task is to tell Baby Volcano the weight sum of all edges on the minimal spanning tree, so that he could verify his answer.Given two positive integers, lcm(i,j) is defined as the minimal positive integer k satisfying both i and j are factors of k.
#include <bits/stdc++.h>using namespace std;const int N = 1000010;typedef long long LL;
LL TT,nn,k;
namespace Min25 {int prime[N], id1[N], id2[N], flag[N], ncnt, m;LL g[N], sum[N], a[N], T, n;inline void fff(){for(int i=0;i<=N;i++){prime[i]=0;id1[i]=0;id2[i]=0;flag[i]=0;g[i]=0;sum[i]=0;a[i]=0;}ncnt=0;m=0;T=0;n=0;}inline int ID(LL x) {return x <= T ? id1[x] : id2[n / x];}inline LL calc(LL x) {return x * (x + 1) / 2 - 1;}inline LL f(LL x) {return x;}inline void init() {T = sqrt(n + 0.5);for (int i = 2; i <= T; i++) {if (!flag[i]) prime[++ncnt] = i, sum[ncnt] = sum[ncnt - 1] + i;for (int j = 1; j <= ncnt && i * prime[j] <= T; j++) {flag[i * prime[j]] = 1;if (i % prime[j] == 0) break;}}for (LL l = 1; l <= n; l = n / (n / l) + 1) {a[++m] = n / l;if (a[m] <= T) id1[a[m]] = m; else id2[n / a[m]] = m;g[m] = calc(a[m]);}for (int i = 1; i <= ncnt; i++)for (int j = 1; j <= m && (LL)prime[i] * prime[i] <= a[j]; j++)g[j] = g[j] - (LL)prime[i] * (g[ID(a[j] / prime[i])] - sum[i - 1]);}inline LL solve(LL x) {if (x <= 1) return x;return n = x, init(), g[ID(n)];}}void extend_gcd(LL a,LL b,LL &x,LL &y)
{if(b==0) {x=1,y=0;return;}extend_gcd(b,a%b,x,y);LL tmp=x;x=y;y=tmp-(a/b)*y;
}
LL mod_inverse(LL a,LL m)
{LL x,y;extend_gcd(a,m,x,y);return (m+x%m)%m;
}
int main()
{LL sum;cin>>TT;while(TT--){sum=0;scanf("%lld%lld",&nn,&k);LL a=mod_inverse(2,k);//cout<<a<<endl;sum=(((((nn+3)%k)*((nn)%k))%k)*a)%k-2;//cout<<sum<<endl;Min25::fff();sum=(sum+Min25::solve(nn+1)-2)%k;printf("%lld\n",sum%k);}return 0;
}

1

Mobius反演和筛法相关推荐

  1. Mobius反演学习

    这篇文章参考了许多资料和自己的理解. 先放理论基础. 最大公约数:小学学过,这里只提一些重要的公式: $·$若$a=b$,则$\gcd(a,b)=a=b$: $·$若$\gcd(a,b)=d$,则$\ ...

  2. SPOJ PGCD (mobius反演 + 分块)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意 :求满足gcd(i , j)是素数(1 &l ...

  3. 关于Mobius反演

    欧拉函数 \(\varphi\) \(\varphi(n)=\)表示不超过 \(n\) 且与 \(n\) 互质的正整数的个数 \[\varphi(n)=n\cdot \prod_{i=1}^{s}(1 ...

  4. Mobius反演方法

    <更新提示> 前置知识:建议有一点DirichletDirichletDirichlet卷积的基础,会线性筛求积性函数.本文可能会持续更新. 可以看我以前在博客园的博客. <正文&g ...

  5. P1447 [NOI2010]能量采集(mobius反演)

    P1447 [NOI2010]能量采集 式子化简 显然题目就是要我们求∑i=1n∑j=1m2gcd(i,j)−1\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} 2gcd(i, ...

  6. Mobius反演总结

    刷了一些浅显的反演题目, 做一个总结 知识点1 给定n个数(可以是1-n), 求有多少数与x互质 f(x)=∑d|xu[d]∗cnt[d] f(x) = \sum_{d|x}u[d]*cnt[d] 其 ...

  7. Bzoj-2820 YY的GCD Mobius反演,分块

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2820 题意:多次询问,求1<=x<=N, 1<=y<=M且gcd( ...

  8. P1829 [国家集训队]Crash的数字表格(推了好久的mobius反演)

    P1829 [国家集训队]Crash的数字表格 / JZPTAB 推导过程 ∑i=1n∑j=1mlcm(i,j)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} lcm(i, j ...

  9. P3327 [SDOI2015]约数个数和 (mobius反演)

    P3327 [SDOI2015]约数个数和 推导过程 求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n​∑j=1m​d(ij ...

最新文章

  1. micronet 测试2
  2. 【人脸识别】人脸验证算法Joint Bayesian详解及实现(Python版)
  3. AtCoder Beginner Contest 055题解
  4. 这个女人,败得很漂亮!看后有感!
  5. c语言大作业旋转,c语言大作业全-20210412035629.docx-原创力文档
  6. Java IO 系列(01)-Java IO概述
  7. 显示计算机硬盘驱动器更改,Win10专业版识别不了第二个硬盘驱动器的处理方法...
  8. 离散数学——自动生成真值表、主合取范式
  9. 汉化后的eclipse改成英文版
  10. 信号处理之freqz函数
  11. android 动态仿磁贴,UWP开发:给App加上动态磁贴
  12. 恶意代码分析实战——反汇编
  13. 人机融合智能时代的人心
  14. 计算两个时间相差多少时间--天、小时、分、秒
  15. WEB测试和App测试、Android和IOS测试区别
  16. 打造最美HTML5 3D机房 —— 第二季重磅回归
  17. 全国首批城市级5G车联网应用项目落地!
  18. 我死了,你还会娶别人吗
  19. LOB大字段空间整理
  20. 这个春节让算法教你:好好吃醋

热门文章

  1. 将多个PCD文件合并
  2. python 数据分析论文_数据分析-任务:论文作者统计
  3. 基于蓝牙适配器的PC与Android端通讯
  4. 【经济学视频课程】需求定律四个准…
  5. 富文本插件 quill
  6. 第五周课后作业(浅谈腾讯的创新)
  7. SuRF : Practical Range Query Filtering with Fast Succinct Tries
  8. 进销存小程序源码 php,Thinkphp响应式进销存仓库管理系统
  9. pb使用记录 关于pbt、pbr、pbd
  10. e2e test 端到端的测试