数论相关。

裴蜀定理

\(a, b\) 不全为 0, 则 : \(ax + by = \gcd(a, b)\) 有解。

\(\text {exgcd}\) :

考虑辗转相除法 \(\gcd(a, b) = \gcd(b, a \operatorname{mod} b)\)

然后已经知道

\[bx' + (a \operatorname{mod} b)y' = d \]

\[bx' + (a - \lfloor \frac{a}{b}\rfloor \times b)y' = d \]

\[ay' + b(x' - \lfloor \frac{a}{b}\rfloor \times y') = d \]

然后有 $x \to y', y \to (x' - \lfloor \frac{a}{b}\rfloor \times y') $


int ex_gcd(int a, int b, int& x, int& y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  int d = ex_gcd(b, a % b, x, y);
  int temp = x;
  x = y;
  y = temp - a / b * y;
  return d;
}

抄 wiki 的,当然前提是 \(d | c\), 这是显然的。

欧拉定理

\(\gcd(a, m) = 1\) 的前提下 :

\[a^{\varphi(m)} \equiv a^{b \operatorname{mod} \varphi(m)} (\operatorname{mod} {m}) \]

扩展欧拉定理

\(a^b \equiv \left\{\begin{matrix} a^b & , b < \varphi (m)\\ a^{b \mod \varphi(m) + \varphi(m)} & , b \geq \varphi(m)\end{matrix}\right. \mod m\)

证明一下:

\(\varphi(n) \leq \frac{n}{2} (odd)\)

\(\varphi(n) -> odd (even)\)

故为 log 次。

lucas 定理

\[\tbinom{n}{m} \equiv \tbinom{n /p}{m /p} \tbinom{n \operatorname{mod} p}{m \operatorname{mod}p} (\operatorname{mod} p) \]

简单互质。

扩展中国剩余定理

很暴力啊兄弟。

\[b_ix_i \equiv a_i (\operatorname{mod} p_i) \]

这一类的问题该怎么做?考虑增量法。

已经知道前 \(i - 1\) 个问题的解是 \(\text {ans}\), 考虑这 \(i\) 个数的 lcm 是 \(m\)。然后 \(ans + mx_i\) 是前 \(i - 1\) 个问题的通解。稍微变换 :

\[b_i(ans + mx_i) \equiv a_i (\operatorname{mod} p_i) \]

\[b_im(x_i) + y(p_i) = (a_i - b_i * ans) \]

同时建议使用取模优化。

稍微做了点杂题。

  • P2480 [SDOI2010]古代猪文

先用欧拉定理化开式子,发现模数变成了一个
squre-free number 啊。

考虑使用 lucas 暴力求值。

  • P4139 上帝与集合的正确用法

\(i \to phi(i)\) 这样的迭代次数是 \(log^2\) 次的, 所以欧拉定理直接算就行了。

  • P4774 [NOI2018] 屠龙勇士

考虑使用平衡树来维护这个武器,然后化成若干个线性同余方程组,使用 exCRT 求解即可。

数论分块

  • P2261 [CQOI2007]余数求和

\[\sum_{i=1}^{n} k \operatorname{mod} i \]

可以考虑先求 :

\[\sum_{i=1}^{n}\lfloor{\frac{k}{i}}\rfloor * i \]

然后考虑枚举 \(\lfloor{\frac{k}{i}}\rfloor\)\(\sqrt k\) 种取值。

枚举 \(l, r\) 这两个左右端点,然后使用等差数列公式即可求值。

特别的 :

\[r = \lfloor\frac{k}{\lfloor{\frac{k}{i}}\rfloor}\rfloor \]

这个是显然的,然后 \(l = r + 1\) 就行了。

  • P2260 [清华集训2012]模积和

\(n \leq m\)

\[\sum_{i = 1}^n (n \operatorname{mod} i)\times\sum_{i = 1}^ m m\operatorname{mod} i - \sum_{i = 1}^n(n\operatorname{mod}i)\times(m \operatorname{mod} i) \]

考虑左边随便算,右边仔细做。

\[\sum\limits_{i=1}^n\left(nm-ni\Big\lfloor\frac{m}{i}\Big\rfloor-mi\Big\lfloor\frac{n}{i}\Big\rfloor+i^2\Big\lfloor\frac{n}{i}\Big\rfloor\Big\lfloor\frac{m}{i}\Big\rfloor\right) \]

这里懒得展开了。后面那一项咋做呢?可以使用平方和公式 \(\sum i^2 = \frac{n(n + 1)(2n + 1)}{6}\)

无所谓,我会插值。

关于 \(n, m\) 除法分块的仔细实现:可以考虑调到更小的一个地方取个 \(\rm min\).

莫比乌斯相关。

初涉反演魔术。

考虑记录 \(\mu(i)\),当 \(i\) 是完全平方数的倍数,\(\mu(i) = 0\), 否则,\(\mu(i)=(-1)^k\),其中 \(k\) 代表质因子个数,显然的 \(\mu(1) =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];
    }
  }
}
  • \(\rm Lemma1\) : \(\sum_{d|n}\mu(d) = 0\), 特地的,在 \(n = 1\) 时不成立。

考虑算数唯一分解定理。

\[n = \prod_{i = 1}^k p_i^{c_i}, s = \prod_{i = 1}^k p_i \]

\[\sum_{d|n}\mu(d) = \sum_{d|s}\mu(d)=\sum_{i = 0}^k \tbinom{k}{i}(-1)^i = (1 + (-1))^k \]

可以看出来,会一点组合数学是好的。

然后可以有 \(\rm Lemma2\) :

\[[\gcd(i, j) = 1] = \sum_{d|\gcd(i, j)}\mu(d) \]

这个其实比较讨巧 \(\mu(1) = 1\),是不是很简单 (

  • $\rm Theorem : $

\(f(n), g(n)\) 是两个数论函数,有如下变幻魔术 :

\[f(n) = \sum_{d|n}g(d) \to g(n) = \sum_{d|n}\mu(d)f(\frac{n}{d}) \]

证明 :

\[\sum_{d|n}\mu(d)f(\frac{n}{d}) = \sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}g(k)=\sum_{k|n}g(k)\sum_{d|\frac{n}{k}}\mu(d) = g(n) \]

为啥最后一步是直接相等的呢?右边的和式在 \(d = n = 1\) 时才为 \(1\), 这个所以证明完毕。

  • $\rm Bonus : $

\[f(n) = \sum_{n|d}g(d) \to g(n) = \sum_{n|d}\mu(\frac{d}{n})f(d) \]

证明 :

\[\sum_{n | d} \mu(\frac{d}{n})f(d) = \sum_{d = 1}^{+ \infty}\mu(d)f(nd) \]

\[\sum_{d = 1}^{+ \infty}\mu(d)\sum_{nd|p}g(p) = \sum_{p =1}^{+\infty}g(np)\sum_{d|p}\mu(d) \]

我母鸡,好像右边等于要证的,然后就做完了。

狄利克雷卷积

老师有没有教过你先点满技能再来写题???

两个积性函数
\(f, g\) ,它们的狄利克雷卷积为 :

\[h(n) = (f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d}) \]

\(h = f* g\),性质有:交换律,结合律,所得 \(h\) 是积性函数。

常见的 \(\rm mark\)

\[\epsilon(n) = [n = 1], I(n) = 1, id(n) = n \]

\(\epsilon\) 是这一运算的单位元 \(f*\epsilon=f\),然后常见结论 :

  • \(\mu * I = \epsilon\) 这个是显然的。

  • \(\varphi * I = id\) 这个就是 \(\sum_{d|n}\varphi(d) = n\)

  • \(id * \mu = \varphi\) 考虑 \(\varphi * I * \mu= id * \mu = \varphi\)

超小伟的,这个是很难的啦。

题目

很难的啦。

  • P3455 [POI2007]ZAP-Queries

\(a \in [1, n], b \in [1, m], \gcd(a, b) = k\).

考虑 \(n \to \frac{n}{k}, m \to \frac{m}{k}\)

\[\sum^n_{i = 1}\sum^m_{i = 1}[\gcd(i, j) =1] \]

\[\sum^n_{i = 1}\sum^m_{i = 1}\sum_{d|\gcd(i, j)}\mu(d) \]

然后考虑 \(d\) 对于这些东东的贡献,这个就好做了。

\[\sum_{d = 1} ^ {n} \mu(i) \lfloor{\frac{n}{d}}\rfloor \lfloor{\frac{m}{d}}\rfloor \]

考虑算一下 \(\mu\) , 分块。

  • P2522 [HAOI2011]Problem b

上面那个题带了个上下界。

可以考虑变成一个几何题,类似二维前缀和的容斥。

\[s[{1 \to l'}][1\to r'] - s[1\to l'][1\to r -1] - s[1\to l - 1][1 \to r'] + s[1 \to l - 1][1 \to r - 1] \]

四次计算。

  • P2257 YY的GCD

\(k \to \rm prime\).

\[\sum_{p \in pri}\sum^n_{i = 1}\sum^m_{i = 1}\sum_{d|\gcd(i, j)}\mu(d) \]

\[\sum_{p \in pri} \sum_{d = 1}^n \mu(i) \lfloor{\frac{n}{d}}\rfloor \lfloor{\frac{m}{d}}\rfloor \]

我只是劣质的搬运工,很难的啦。

整体换元 \(w \to dp\)

\[\sum_{w = 1}^ n \lfloor{\frac{n}{w}}\rfloor\lfloor{\frac{m}{w}}\rfloor \sum_{d'|w}\mu(\frac{w}{d'})[d' \in \rm pri] \]

考虑为啥是 \(\mu(\frac{w}{d'})\) ?我们原本枚举的是 \(d\) 这时候 \(d * d' = T\) 所以是这样的。

后面那个好像可以很快算出来,理应是亚线性的?

  • P4449 于神之怒加强版

我测,小学生数学题!!

\[\sum_{p \to \gcd(i, j)}p^k\sum_{i = 1}^n\sum_{j =1}^n [\gcd(i, j) = 1] \]

\[\sum_{p \to \gcd(i, j)}p^k\sum^n_{i = 1}\sum^m_{i = 1}\sum_{d|\ p}\mu(d) \]

\[\sum_{p \to \gcd(i, j)}p^k\sum_{d = 1}\mu(d)\lfloor{\frac{n}{dp}}\rfloor \lfloor{\frac{m}{dp}}\rfloor \]

好了,换元 \(w \to dp\)

\[\sum_{w = 1}\lfloor{\frac{n}{w}}\rfloor \lfloor{\frac{m}{w}}\rfloor\sum_{d|w} \mu(\frac{w}{d})d^k \]

注意别把 \(p, d\) 弄混了。

后面那个直接 \(n \ln n\) 的调和级数乱算就行了。

不过后面那个好像可以直接筛。

一点点 yyc 的魔法。

可以考虑构建起一点点数论的体系。

先是简易的 \(\epsilon(n) = [n = 1], I(n) = 1\)

\(\sum \mu(d) = 1\) 可知 \(\mu = I^{-1}\) 在 dirichelt 卷积下。

考虑算数唯一分解定理,对于一个质数集合,大小为 \(|p|\)

\[\vec{n} = (c_1, c_2, c_3, ....., c_{|p|}) \]

然后我们可以把数看成一个高维点。然后建立起了与普通情况的联系。

\[div_f(n) = \sum_{d | n} f(d) \]

\[mul_f(n) = \sum_{n | d} f(d) \]

这两种本质上对应着高维前缀和,高维后缀和。所以对其求和的时候要注意着其大小的关系。

事实上我们可以模仿 SOS DP 考虑每一次对于向量 \(\vec{n}\) 某一位加一减一进行求和。

我们考虑对于这一个问题进行容斥求和的过程,叫做高维差分。

实质上可以用上文提及的莫比乌斯反演定理解决。

P2714 四元组统计

考虑对于 \(ocur_{n}\) 进行倍数求和得到 \(f(n)\)

那么 \(\binom{f(n)}{4}\) 即为满足 gcd 是 \(n\) 的倍数的方案数。

此时考虑莫比乌斯反演即可。做一个高维差分解决问题。

for (int i = 1; p[i] <= lim; i ++)
	for (int j = lim / p[i]; j; j --)
		f[j] += f[j * p[i]];
for (int i = 1; p[i] <= lim; i ++)
	for (int j = 1; j * p[i] <= lim; j ++)
		f[j] -= f[j * p[i]];

CF915G Coprime Arrays

乱算一通有这一个狮子:

\[f(n) = \sum \mu(d)\lfloor\frac{k}{d}\rfloor^n \]

可以整除分块,但过不了一点。

这个时候可以考虑求后面柿子的差分然后累计即可。

杜教筛。

\(s(n) = \sum f(i)\) 的方法。

考虑找到一个 \(g\)

求狄利克雷卷积有:

\[\sum (f * g)(i) = \sum \sum_{d | i} g(d)f(\frac{i}{d}) \]

\[= \sum g(i)s(\frac{n}{i}) \]

\[g(1)s(n) = \sum_{i = 1} g(i)s(\frac{n}{i}) - \sum_{i = 2} g(i)s(\frac{n}{i}) \]

考虑 \(f*g\) 的意义可以巧妙地将其消去,然后可以对于右边运用整除分块递归求解,复杂度不太会算。

\(\sum \phi\)

总所周知 \(\phi * I = id\) 这个是好算的,然后直接运用一个求和公式即可。

\(\sum \mu\)

感觉不如 \(\mu * I = \epsilon\)

对于诸如 \(\phi * id\) 此类,乘上 \(id\) 即可消去。

P3768 简单数学题

\[\sum_{i = 1}\sum_{j = 1}ij\gcd(i, j) \]

考虑直接欧拉反演。

\[\sum_{i = 1}\sum_{j = 1}ij\sum_{d | gcd(i, j)}\phi(d) \]

然后提出来 d。

\[\sum_{d = 1} \phi(d)\sum_{d | i}\sum_{d | j}ij \]

提出来 d again。

\[\sum_{d = 1} \phi(d)d^2\sum_{i = 1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j = 1}^{\lfloor\frac{n}{d}\rfloor}ij \]

后面是一个求和。

\[\sum_{d = 1} \phi(d)d^2 S^2(\frac{n}{d}) \]

对于左边用杜教筛。

\[(f*g)(n) = \sum_{d | n}\phi(d)d^2 * (\frac{n}{d})^2 \]

\[(f*g)(n) = \sum_{d | n}\phi(d)n^2 \]

\[(f*g)(n) = n^3 \]

然后套上杜教筛公式。

\[s(n) = \sum i^3 - \sum g(i)s(\frac{n}{d}) \]

\(g(i)\) 可以用平方和公式解决,然后我们就做完了这个杀软题。

posted @ 2023-07-02 14:47  Cust10  阅读(43)  评论(0)    收藏  举报