数论相关。
裴蜀定理
若 \(a, b\) 不全为 0, 则 : \(ax + by = \gcd(a, b)\) 有解。
\(\text {exgcd}\) :
考虑辗转相除法 \(\gcd(a, b) = \gcd(b, a \operatorname{mod} b)\)
然后已经知道
然后有 $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^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 定理
简单互质。
扩展中国剩余定理
很暴力啊兄弟。
这一类的问题该怎么做?考虑增量法。
已经知道前 \(i - 1\) 个问题的解是 \(\text {ans}\), 考虑这 \(i\) 个数的 lcm 是 \(m\)。然后 \(ans + mx_i\) 是前 \(i - 1\) 个问题的通解。稍微变换 :
同时建议使用取模优化。
稍微做了点杂题。
- P2480 [SDOI2010]古代猪文
先用欧拉定理化开式子,发现模数变成了一个
squre-free number 啊。
考虑使用 lucas 暴力求值。
- P4139 上帝与集合的正确用法
\(i \to phi(i)\) 这样的迭代次数是 \(log^2\) 次的, 所以欧拉定理直接算就行了。
- P4774 [NOI2018] 屠龙勇士
考虑使用平衡树来维护这个武器,然后化成若干个线性同余方程组,使用 exCRT 求解即可。
数论分块
- P2261 [CQOI2007]余数求和
可以考虑先求 :
然后考虑枚举 \(\lfloor{\frac{k}{i}}\rfloor\) 的 \(\sqrt k\) 种取值。
枚举 \(l, r\) 这两个左右端点,然后使用等差数列公式即可求值。
特别的 :
这个是显然的,然后 \(l = r + 1\) 就行了。
- P2260 [清华集训2012]模积和
记 \(n \leq m\)
考虑左边随便算,右边仔细做。
这里懒得展开了。后面那一项咋做呢?可以使用平方和公式 \(\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\) 时不成立。
考虑算数唯一分解定理。
可以看出来,会一点组合数学是好的。
然后可以有 \(\rm Lemma2\) :
这个其实比较讨巧 \(\mu(1) = 1\),是不是很简单 (
- $\rm Theorem : $
若 \(f(n), g(n)\) 是两个数论函数,有如下变幻魔术 :
证明 :
为啥最后一步是直接相等的呢?右边的和式在 \(d = n = 1\) 时才为 \(1\), 这个所以证明完毕。
- $\rm Bonus : $
证明 :
我母鸡,好像右边等于要证的,然后就做完了。
狄利克雷卷积
老师有没有教过你先点满技能再来写题???
两个积性函数
\(f, g\) ,它们的狄利克雷卷积为 :
记 \(h = f* g\),性质有:交换律,结合律,所得 \(h\) 是积性函数。
常见的 \(\rm mark\) :
\(\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}\)
然后考虑 \(d\) 对于这些东东的贡献,这个就好做了。
考虑算一下 \(\mu\) , 分块。
- P2522 [HAOI2011]Problem b
上面那个题带了个上下界。
可以考虑变成一个几何题,类似二维前缀和的容斥。
四次计算。
- P2257 YY的GCD
\(k \to \rm prime\).
我只是劣质的搬运工,很难的啦。
整体换元 \(w \to dp\)
考虑为啥是 \(\mu(\frac{w}{d'})\) ?我们原本枚举的是 \(d\) 这时候 \(d * d' = T\) 所以是这样的。
后面那个好像可以很快算出来,理应是亚线性的?
- P4449 于神之怒加强版
我测,小学生数学题!!
好了,换元 \(w \to dp\)
注意别把 \(p, d\) 弄混了。
后面那个直接 \(n \ln n\) 的调和级数乱算就行了。
不过后面那个好像可以直接筛。
一点点 yyc 的魔法。
可以考虑构建起一点点数论的体系。
先是简易的 \(\epsilon(n) = [n = 1], I(n) = 1\)。
由 \(\sum \mu(d) = 1\) 可知 \(\mu = I^{-1}\) 在 dirichelt 卷积下。
考虑算数唯一分解定理,对于一个质数集合,大小为 \(|p|\)
然后我们可以把数看成一个高维点。然后建立起了与普通情况的联系。
这两种本质上对应着高维前缀和,高维后缀和。所以对其求和的时候要注意着其大小的关系。
事实上我们可以模仿 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
乱算一通有这一个狮子:
可以整除分块,但过不了一点。
这个时候可以考虑求后面柿子的差分然后累计即可。
杜教筛。
求 \(s(n) = \sum f(i)\) 的方法。
考虑找到一个 \(g\)。
求狄利克雷卷积有:
考虑 \(f*g\) 的意义可以巧妙地将其消去,然后可以对于右边运用整除分块递归求解,复杂度不太会算。
求 \(\sum \phi\)
总所周知 \(\phi * I = id\) 这个是好算的,然后直接运用一个求和公式即可。
求 \(\sum \mu\)
感觉不如 \(\mu * I = \epsilon\)。
对于诸如 \(\phi * id\) 此类,乘上 \(id\) 即可消去。
P3768 简单数学题
考虑直接欧拉反演。
然后提出来 d。
提出来 d again。
后面是一个求和。
对于左边用杜教筛。
然后套上杜教筛公式。
\(g(i)\) 可以用平方和公式解决,然后我们就做完了这个杀软题。

浙公网安备 33010602011771号