做了POJ2286之后,发现题目要求求出1-n因数最大的那个数。当时没想到合适的方法,后来想到了是反素数。
顺便总结了常见的和反素数有关的题型(个人觉得反素数只是作为题目的某一部分出现),还请各位dalao轻拍。
其实顾名思义,素数就是因子只有两个的数,那么反素数,就是因子最多的数(并且因子个数相同的时候值最小),所以反素数是相对于一个集合来说的。
我所理解的反素数定义就是,在一个集合中,因素最多并且值最小的数,就是反素数。
那么,如何来求解反素数呢?
首先,既然要求因子数,我首先想到的就是素因子分解。把n分解成的形式,其中p是素数,k为他的指数。这样的话
就是总因子个数。
但是显然质因子分解的复杂度是很高的,并且前一个数的结果不能被后面利用。所以要换个方法。
我们来观察一下反素数的特点。
- 反素数肯定是从2开始的连续素数的幂次形式的乘积。
- 数值小的素数的幂次大于等于数值大的素数,即