luogu P1463 [HAOI2007]反素数 (数学)

luogu P1463 [HAOI2007]反素数

Description
对于任何正整数x,其约数的个数记作g(x) (例如,g(1)=1,g(6)=4)
如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反素数 (例如,整数1,2,4,6等都是反素数)
现在给定一个数N,你能求出不超过N的最大的反素数么?

Hint
这题要先分成几个部分一一讲解

约数定理
我们设$P$是素数集合,即$P={2,3,5,7,9…}$
那么对任意一个大于1的正整数N,存在集合$A$,使得 $$N=\prod_{i=1}^{k} {P_i}^{A_i}={P_1}^{A_1}*{P_2}^{A_2}*…*{P_k}^{A_k}$$
即对N分解质因数
那么N的约数个数,就是从N的质因数中选出若干相乘后得到的不同的数的个数
因为都是素数相乘,只要有一个元素不同,得到的结果就不同
则对于$P_i$,我们可以取出$0,1,2,3…A_i$个,根据乘法原则,N的约数个数$$g(N)=\prod_{i=1}^{k} (A_i+1)=(A_1+1)(A_2+1)…(A_k+1)$$

其实关于约数还有一些有趣的定理,这里引用一位大佬的博客

题意转化
根据反素数的定义,一个数N是反素数说明$\forall {i}\in{(0,N)},g(N)>g(i)$,即N的约数个数是1~N中最大的
那么对于一个数字N,如果存在$i<j,A_i<A_j$,则N不是反素数
证明 设交换$A_i,A_j$后,新的结果为M,则M的约数个数和N相等,要证N不是反素数,只需证明N>M
则只需证明$${P_i}^{A_j}*{P_j}^{A_i}<{P_i}^{A_i}*{P_j}^{A_j}$$
将右边除到左边化简得$$(\frac {P_j}{P_i})^{A_j-A_i}>1$$而${P_j}>{P_i},{A_j}>{A_i}$,结论成立.
则N的集合A递减
所以我们枚举每一个质数指数 搜最大答案

posted @ 2018-05-08 17:12  Nepenthe  阅读(129)  评论(0)    收藏  举报


删边加边,浮生建模