
【bzoj1053】反素数
题意
对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么?
\(1<=N<=2,000,000,000\)
分析
设\(N={a_1}^{p_1}{a_2}^{p_2}...{a_m}^{p_m}\)
所以\(g(N)=\prod_{i=1}^m(p_i+1)\)
现在要求出不超过\(N\)的\(x\),使得\(g(x)>g(i)\)
我们尝试找出\(x\)的特性,来缩小枚举的范围。
假定\(p_1,p_2,...,p_m\)一定,那么约数个数一定。
假设\(p_1,p_2,...,p_m\)可以组合成一个数\(x<N\),那么意味着它能组合的最小的数\(x<N\),所以\(a_1,a_2,...,a_m\)一定越小越好,即取前\(m\)个素数。
而\(N\leq 2*10^9\),所以只用预处理出前20个素数即可。
而且,当\(a_1<a_2<...<a_m\)一定时,考虑\(p\)要满足什么关系。
可以得到这样的结论:\(p_1>p_2>p_3>...>p_m\),否则可以通过交换得到更小的数而可以满足条件。
所以我们先预处理出前20个素数,然后从小到大枚举当前素因子取多少个。
取一个约数个数最大的即可。