「输了三把」
「我赢了三把」
「你们两个为什么输赢还不一样」
「因为 GCD,aa 和 bb 两个正整数,可以任意加减,能得到的最小正整数是 gcd⁡(a,b)\gcd(a,b)」

【暴力循环】 下面这个表保证很多东西不太大,比如:

  • 素数距离 :对于 n>3n>3,n<p<2n−2n<p<2n-2 中至少有一个 pp 是素数;10910^{9} 范围内最大素数距离为 300。给定 l,rl,r,找到 l⩽A⩽B⩽rl \leqslant A \leqslant B \leqslant r 且 (A,B)=1(A,B) = 1,最大化 ∣A−B∣\left\vert A-B \right\vert,直接写两重循环,101810^{18} 的数据也跑得飞快。
  • 素因子个数 :ci,j=gcd⁡(i,a)+gcd⁡(j,b)c_{i,j}=\gcd(i,a)+\gcd(j,b),求从左上走到右下的最小代价。设 AA 是最大的与 aa 互素的数,BB 是最大的与 bb 互素的数,从左上到点 (A,B)(A,B) 的最小额外代价是 (A−1)+(B−1)(A-1)+(B-1),而且不可能存在超过连续 26 个数字与 aa 不互素(因为连续 pp 个数必有一个 pp 的倍数,查表知 ω(n)=9\omega(n)=9 时 nn 已经远远超过 1e6),即 n−A<25n-A<25,剩下 25×2525\times 25 暴力 DP 即可。
  • 前缀 GCD 数量 :设 gig_i 为 aia_i 的前 / 后缀 GCD,则 gig_i 的取值只有 O(log⁡V)O(\log V) 种。
  • 不超过 nn 的所有数的因子总数,lcm 不超过 nn 的无序对数,都是 nlog⁡nn\log n 量级。
  • 递推数列具有模周期性,而且对于斐波那契数列,这个周期不会超过 6×6\times 模数。
  • 找出所有正整数 kk 使得 {Ai mod k}\lbrace A_{i}\text{mod}k \rbrace 恰好有 CC 种数值不同的数且每种数的出现次数相等。枚举 kk,检查是否合法。考察 kk 的上限,枚举到 kk 作为模数时,实际上把 0∼V0\sim V 划分成了 ⌈Vk⌉\lceil \frac{V}{k} \rceil 个分区:[0,k),[k,2k),…,[⌊Vk⌋k,V)[0, k), [k, 2k),\dots, [\lfloor \frac V k \rfloor k, V),按要求每个分区包含的数字不能超过 CC 种,即整个 {Ai}\lbrace A_{i} \rbrace 最多只能有 C⌈Vk⌉C \lceil \frac{V}{k} \rceil 种数字,因此 C⌈Vk⌉⩾∣A∣  ⟹  k⩽V⌈∣A∣C⌉−1C \lceil \frac{V}{k} \rceil \geqslant |A| \implies k \leqslant \frac{V}{\lceil \frac{|A|}{C} \rceil - 1}。总的时间复杂度便是严格的 O(Nlog⁡N+VC)\mathcal{O}(N\log N + VC) 。

【枚举约数】 数据范围 10410^{4},某中间答案是一个数 xx 的约数,枚举这个中间答案以计算最终答案, 特判全部相等(即特判 0 的约数,此时 x=0x=0 什么也没有枚举),比如:

  • 模 kk 下,aa 与 bb 的不进位加法等于 cc,找出一个 kk,或报告不存在。发现 k∣a+b−ck\mid a+b-c。
  • bi=ai mod kb_i = a_i \bmod k,给定 aa 和打乱的 bb,找出 kk。发现 k∣sum⁡(a)−sum⁡(b)k\mid\operatorname{sum}(a)-\operatorname{sum}(b)。
  • 给定序列及 kk,找出所有满足 1⩽x⩽k1 \leqslant x \leqslant k 的整数 xx,使得序列每个数加上 xx 后,所有子区间中都存在一个数整除这个区间的每个数。发现序列最小值 aja_{j} 满足 (aj+x)∣gcd⁡(ai+1−ai,… )(a_{j}+x)\mid \gcd(a_{i+1}-a_{i},\dots)。
  • 给定 nn,求满足 1⩽m⩽n1 \leqslant m \leqslant n 且 n mod mn\bmod m 等于 mm 的数码和 S(m)S(m) 的 mm 的数量。发现 S(m)S(m) 不多,而且 m∣n−S(m)m\mid n-S(m)。

【GCD 性质】 GCD (Greatest Common Divisor) 比较重要的性质:

  • (a,b)=(a,a−b)(a,b)=(a,a-b),把一群数的 GCD 转化为差分 GCD,适用于整体加减。
  • 四个经典的代数性质:设 a≠ba \neq b,gcd⁡(a,b)⩽min⁡{a,b},max⁡{a,b}2,a+b3,∣a−b∣\gcd(a,b) \leqslant \min\lbrace a,b \rbrace,\dfrac{\max\lbrace a,b \rbrace}{2}, \dfrac{a+b}{3},|a-b|,用于估计 GCD 上界。
  • 裴蜀定理 Bézout’s Lemma:min⁡ax+by=gcd⁡(a,b)\min ax+by=\gcd(a,b)。
  • 经典数论技巧,设 d=(a,b),a=a1d,b=b1dd=(a, b), a = a_{1} d, b = b_{1} d。
nnlog⁡10n\log_{10} nn!n!C(n,n/2)C(n, n/2)lcm(1…n)\text{lcm}(1 \dots n)
20.30102999222
30.47712125636
40.6020599924612
50.698970001201060
60.778151257202060
70.84509804504035420
80.903089984032070840
90.954242513628801262520
10136288002522520
111.041392693991680046227720
121.0791812547900160092427720
151.176091261.31e121.31\text{e}126435360360
201.301030002.43e182.43\text{e}18184756232792560
251.397940011.55e251.55\text{e}25520030026771144400
301.477121252.65e322.65\text{e}321551175201.444e141.444\text{e}14
n≤n \lemax⁡{ω(n)}\max\{\omega(n)\}max⁡{d(n)}\max\{d(n)\}π(n)\pi(n)
10244
10031225
10310^3432168
10410^45641229
10510^561289592
10610^6724078498
10710^78448664579
10810^887685761455
10910^9913445.08e75.08\text{e}7
101010^{10}1023044.55e84.55\text{e}8
101110^{11}1040324.12e94.12\text{e}9
101210^{12}1167203.76e103.76\text{e}10
101310^{13}1210752—
101410^{14}1217280—
101510^{15}1326880—
101610^{16}1341472—
101710^{17}1464512—
101810^{18}15103680—