东西多,而且比较高妙,和数学的关系较大。
没写完,才写了一点,先去冲csp了,冲完再更
基础
质数, 分解质因数,整除,互质,gcd/lcm
放一起是因为都很基本
trick: 利用质因子间的独立性, 分解问题
例1
求 (1...n) 所有数的 lcm,(nle 10^8),1s
先筛出来质数。考虑这些数的lcm,就是每种质数取最高次
最高能取多少次?对于每个 (p),取最大的 (k) 使得 (p^kle n),那它就是 (k) 次。
枚举每个 (p),计算 (k),乘起来。
复杂度: (O(dfrac{n}{ln n} imes log n)=O(n))
例2 SDOI2008沙拉公主的困惑
这里用到一个东西: 互质的规律性
对于一个 (p),设 (f(i)) 表示 (i) 是否与 (p) 互质 (1互质,0不互质),那么 (f(i)=f(i+p),forall iin N^{*})
那对于这个题,计算出 (varphi(m!) imes dfrac{n!}{m!}) 即可。
(varphi(m!)) 就把 (m) 分解质因数计算即可。讨论一下 (m>mod) 的情况。
例3 CF1295D
(gcd(a,m)=gcd(a+x,m),xin [0,m))
首先把 (a,m) 约掉一个 (gcd)。然后就变成:
计算多少 (xin[0,m)) 满足 (gcd(a+x,m)=1),也就是 (a+x) 和 (m) 互质
根据互质的规律性,我们发现这玩意可以平移,然后就等价于有多少个 (x) 和 (m) 互质。这玩意就是 (varphi(m))。
考虑到我们约掉了一个 (gcd),也就是说,答案是
(varphi(dfrac{m}{gcd(a,m)}))
例4 CF615D
求 (n) 所有因数的积。(n) 用分解质因数的形式给出,质数的个数 (le 2 imes 10^5),每个质数都在 (2 imes 10^5) 以内。
有一个东西:(n) 的因数,相当于是 (n) 分解质因数后每个 (p^k),选择一个指数 (c(cle k)),然后把 (p^c) 乘起来。这个方法可以得到 (n) 的所有因数。
因此,我们用这个生成法,考虑每个质数 (p) 的贡献,设它是 (k) 次。那它显然可以取 (1,2,3...k) 次,都可以。这些乘起来就是 (p^{frac{k(k+1)}{2}})。
然后它被算了多少次呢?显然,其它的质因数可以随便取,每取一次就会把它算一次。那把其它质因数的指数 (+1) 乘起来,就是它被算的次数。
然后把每个贡献乘起来就行了。