数论 专题整理

东西多,而且比较高妙,和数学的关系较大。

没写完,才写了一点,先去冲csp了,冲完再更

基础

质数, 分解质因数,整除,互质,gcd/lcm

放一起是因为都很基本

trick: 利用质因子间的独立性, 分解问题

例1

1...n 所有数的 lcm,n108,1s

先筛出来质数。考虑这些数的lcm,就是每种质数取最高次

最高能取多少次?对于每个 p,取最大的 k 使得 pkn,那它就是 k 次。

枚举每个 p,计算 k,乘起来。

复杂度: O(nlnn×logn)=O(n)

例2 SDOI2008沙拉公主的困惑

这里用到一个东西: 互质的规律性

对于一个 p,设 f(i) 表示 i 是否与 p 互质 (1互质,0不互质),那么 f(i)=f(i+p),iN

那对于这个题,计算出 φ(m!)×n!m! 即可。

φ(m!) 就把 m 分解质因数计算即可。讨论一下 m>mod 的情况。

例3 CF1295D

gcd(a,m)=gcd(a+x,m),x[0,m)

首先把 a,m 约掉一个 gcd。然后就变成:

计算多少 x[0,m) 满足 gcd(a+x,m)=1,也就是 a+xm 互质

根据互质的规律性,我们发现这玩意可以平移,然后就等价于有多少个 xm 互质。这玩意就是 φ(m)

考虑到我们约掉了一个 gcd,也就是说,答案是

φ(mgcd(a,m))

例4 CF615D

n 所有因数的积。n 用分解质因数的形式给出,质数的个数 2×105,每个质数都在 2×105 以内。

有一个东西:n 的因数,相当于是 n 分解质因数后每个 pk,选择一个指数 c(ck),然后把 pc 乘起来。这个方法可以得到 n 的所有因数。

因此,我们用这个生成法,考虑每个质数 p 的贡献,设它是 k 次。那它显然可以取 1,2,3...k 次,都可以。这些乘起来就是 pk(k+1)2

然后它被算了多少次呢?显然,其它的质因数可以随便取,每取一次就会把它算一次。那把其它质因数的指数 +1 乘起来,就是它被算的次数。

然后把每个贡献乘起来就行了。

posted @   Flandre-Zhu  阅读(80)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示