反素数
定义
“反素数”(antiprime number)也称为“高合成数”(highly composite number)。
设 τ(n)=∑d∣n1,表示 n 的所有因数个数。
若正整数 q 满足:对于 ∀x∈Z⩾1,x<q 都有 τ(q)>τ(x) 则称 q 为反素数。
例如前几个反素数为 1,2,4,6,12。
性质
命题1:设(标准分解) q=p1α1p2α2⋯psαs 且 q 为反素数,则一定有 α1⩾α2⩾⋯⩾αs。
其中 p1<p2<⋯<ps。
证明:
由组合性质得:q 的因数个数 τ(q)=(α1+1)(α2+1)⋯(αs+1)。
反设,不失一般性,设 α1<α2,令 q′=p1α2p2α1⋯psαs。
则 τ(q)=τ(q′) 且 q′<q,与 q 为反素数矛盾,则原命题成立。
QED
推论2:设 q 为反素数,则其素因数必然是连续的,即若 αs>0 则 ∀i∈[1,s],αi>0。
求不超过 N 的最大的反素数
而且我们又可以发现,可以通过已有的反素数推出下一个最小的反素数,我们构建一个大根堆,以数值大小为键值。
我们在已有的反素数基础上,在满足上述反素数的性质的基础上,乘上一个素数放入堆中,则下一个堆顶元素,一定就是下一个最小的反素数。
以此类推,我们可以求出连续的所有反素数(在一定范围内)。
总复杂度 O(logNlogN),第一个 log 是堆的复杂度,第二个 log 是每次枚举素数的复杂度。
Luogu - P1463 [POI2001][HAOI2007]反素数
P1463 [POI2001][HAOI2007]反素数
题意
给定一个 N,求不超过 N 的最大的反素数。
数据范围:1⩽N⩽2×109。
思路
使用上述的结论和思路即可。
下面是前几个素数之积,用来判断至少要枚举的素数个数用的。
点击显/隐代码
51nod - 1061 最复杂的数 V2
1061 最复杂的数 V2
题意
给定一个 N,求不超过 N 的最大的反素数和其包含的约数个数。
数据范围:1⩽N⩽10200。
思路
做法和上道题一模一样,加上高精度即可,还是要打表,最后二分答案即可。
点击显/隐代码
POJ 2886: Who Gets the Most Candies?
见 Blog。