基础数论 (学习笔记)(25.11.10)
基础数论 (练习笔记)
素数筛
用的是素数筛的思想,如果遇见一个含7的数,就去往后遍历,把每个可能的合数遍历掉,做一个vis优化,让每个数都遍历一次,做到 \(O(n)\) 预处理就行
扩展欧几里得
这个题就是板子题了,是直接把青蛙的运动转移成同余方程,注意一下模数不能成为负数,没了
这个题把exgcd的每个方面考察到了,首先是最基础的还原原式:
首先用exgcd求得对于 \(a,b\) ,\(ax+by = gcd(a,b)\) 得到 \(x\) ,然后可以复原原始式子:
\[ax*\frac{c}{gcd(a,b)} + ay*\frac{c}{gcd(a,b)} = gcd(a,b)*\frac{c}{gcd(a,b)} \]所以
\[\begin{cases} x_0 = x*\frac{c}{gcd(a,b)}\\ y_0 = y*\frac{c}{gcd(a,b)} \end{cases} \]然后我们就还原了原始式子的一组特解
接下来我们就要用到一个新的东西,求通解,我们可以找一下\(x\)和\(y\)的变化规律,就能求到所有的解
所以我们假设 \(a(x_0+m)+b(y_0+n) = c\),之后我们可以求出\(m\)和\(n\),使 \(am+bn=0\)
最后解并且设一个未知数\(t\)
\[\begin{cases} m = t*\frac{b}{d}\\ n = -t*\frac{a}{d} \end{cases} \]所以我们最后只需要一个t就可以得到x和y的所有答案(\(tx=\frac{b}{d}\),\(ty=\frac{a}{d}\))
然后下面分别是\(t\)取在\(x\ge 1\)的最小值看一下\(y\)的值,如果不是正数,就说明无整数解,然后分别去求
之后看一下在有整数解的情况下:
- 对于正整数解的个数,因为现在已经是\(x_{min}\)所以,我们只需要算一下y有几个正整数解就行了
- 对于\(y\)的最小正整数解,我们可以通过\(t\)的取值区间去找一个最小值,还可以通过直接模一个\(ty\)去求,因为随\(t\)的增减会加减一些\(ty\),所以我们可以将\(y\)的解视为一个差值大小为\(ty\)的等差数列,我们需要的最小的正整数解就是一个解在\(ty\)区间在0左右的解,所以直接将其模\(ty\),就可以得到一个最小正整数解
- \(x_{max}\)只需要去加上 \(正整数解的个数*tx\) 就行
- \(x_{min}\) 和 \(y_{max}\) 都已经算出来了
欧拉函数
首先去尝试观察合法答案组成部分特点,先形式化一下:
\[\begin{cases} x = k1*p\\ y = k2*p \end{cases} \]推为:
\[\begin{cases} k1 = x/p\\ k2 = y/p \end{cases} \]此时\(k1\) \(k2\)互质
\(1\le x,y \le n\) \(k1=x/p;\) \(k2=y/p;\) 就可以知道,在k1和k2是互质的情况下,两个数\(*p\)得到的 \(x,y\),就是在\(\le n\)情况下的一对GCD(符合题意的质数GCD)。所以我们可以得到结论,在\(n/p\)范围内的欧拉函数之和\(*2\)就是在 \(gcd(x,y)\) 为 \(p\) 的时候,素数对的和,同时需要一个前缀和维护,最后把答案都加起来,还要考虑在 \(x=y\) 时的情况,所以再加一下 \(\le n\) 的时候的质数数量
(其实还能直接形式化答案,然后把答案进行变形,可以发现也是去求一下答案)

浙公网安备 33010602011771号