P1463 [POI2001][HAOI2007]反素数

反素数

定义

“反素数”(antiprime number)也称为“高合成数”(highly composite number)。

τ(n)=dn1\tau(n)=\sum_{d|n} 1,表示 nn 的所有因数个数。

若正整数 qq 满足:对于 xZ1,x<q\forall x\in\mathbb Z_{\geqslant 1},x < q 都有 τ(q)>τ(x)\tau(q) > \tau(x) 则称 qq 为反素数。

例如前几个反素数为 1,2,4,6,121, 2, 4, 6, 12

性质

命题1:设(标准分解) q=p1α1p2α2psαsq=p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_s^{\alpha_s}qq 为反素数,则一定有 α1α2αs\alpha_1 \geqslant \alpha_2\geqslant\cdots\geqslant\alpha_s
其中 p1<p2<<psp_1 < p_2 < \cdots < p_s

证明:

由组合性质得:qq 的因数个数 τ(q)=(α1+1)(α2+1)(αs+1)\tau(q)=(\alpha_1+1)(\alpha_2+1)\cdots(\alpha_s+1)

反设,不失一般性,设 α1<α2\alpha_1 < \alpha_2,令 q=p1α2p2α1psαsq'=p_1^{\alpha_2}p_2^{\alpha_1}\cdots p_s^{\alpha_s}

τ(q)=τ(q)\tau(q)=\tau(q')q<qq' < q,与 qq 为反素数矛盾,则原命题成立。

QED

推论2:设 qq 为反素数,则其素因数必然是连续的,即若 αs>0\alpha_s > 0i[1,s],αi>0\forall i \in [1, s], \alpha_i > 0

求不超过 NN 的最大的反素数

而且我们又可以发现,可以通过已有的反素数推出下一个最小的反素数,我们构建一个大根堆,以数值大小为键值。

我们在已有的反素数基础上,在满足上述反素数的性质的基础上,乘上一个素数放入堆中,则下一个堆顶元素,一定就是下一个最小的反素数。

以此类推,我们可以求出连续的所有反素数(在一定范围内)。

总复杂度 O(logNlogN)O(\log N\log N),第一个 log\log 是堆的复杂度,第二个 log\log 是每次枚举素数的复杂度。

Luogu - P1463 [POI2001][HAOI2007]反素数

P1463 [POI2001][HAOI2007]反素数

题意

给定一个 NN,求不超过 NN 的最大的反素数。

数据范围:1N2×1091\leqslant N \leqslant 2\times 10^9

思路

使用上述的结论和思路即可。

下面是前几个素数之积,用来判断至少要枚举的素数个数用的。

2 2
3 6
5 30
7 210
11 2310
13 30030
17 510510
19 9699690
23 223092870
29 6469693230

51nod - 1061 最复杂的数 V2

1061 最复杂的数 V2

题意

给定一个 NN,求不超过 NN 的最大的反素数和其包含的约数个数。

数据范围:1N102001\leqslant N \leqslant 10^{200}

思路

做法和上道题一模一样,加上高精度即可,还是要打表,最后二分答案即可。

POJ 2886: Who Gets the Most Candies?

Blog


P1463 [POI2001][HAOI2007]反素数
https://wty-yy.github.io/posts/49579/
作者
wty
发布于
2021年8月26日
许可协议