基础数论 (学习笔记)(25.11.10)

基础数论 (练习笔记)

素数筛

P7960 报数

用的是素数筛的思想,如果遇见一个含7的数,就去往后遍历,把每个可能的合数遍历掉,做一个vis优化,让每个数都遍历一次,做到 \(O(n)\) 预处理就行

扩展欧几里得

P1516 青蛙的约会

这个题就是板子题了,是直接把青蛙的运动转移成同余方程,注意一下模数不能成为负数,没了

P5656 【模板】二元一次不定方程

这个题把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\)的值,如果不是正数,就说明无整数解,然后分别去求

之后看一下在有整数解的情况下:

  1. 对于正整数解的个数,因为现在已经是\(x_{min}\)所以,我们只需要算一下y有几个正整数解就行了
  2. 对于\(y\)的最小正整数解,我们可以通过\(t\)的取值区间去找一个最小值,还可以通过直接模一个\(ty\)去求,因为随\(t\)的增减会加减一些\(ty\),所以我们可以将\(y\)的解视为一个差值大小为\(ty\)的等差数列,我们需要的最小的正整数解就是一个解在\(ty\)区间在0左右的解,所以直接将其模\(ty\),就可以得到一个最小正整数解
  3. \(x_{max}\)只需要去加上 \(正整数解的个数*tx\) 就行
  4. \(x_{min}\)\(y_{max}\) 都已经算出来了

欧拉函数

P2568 GCD

首先去尝试观察合法答案组成部分特点,先形式化一下:

\[\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\) 的时候的质数数量

(其实还能直接形式化答案,然后把答案进行变形,可以发现也是去求一下答案)

posted @ 2025-11-10 17:19  Yuriha  阅读(3)  评论(0)    收藏  举报