对于任何正整数x,其约数的个数记作g(x),例如g(1)=1、g(6)=4。
如果某个正整数x满足:对于任意的小于x的正整数 i,都有g(x)>g(i) ,则称x为反素数。
例如,整数1,2,4,6等都是反素数。
现在给定一个数N,请求出不超过N的最大的反素数。
输入格式
一个正整数N。
输出格式
一个整数,表示不超过N的最大反素数。
数据范围
1≤N≤2∗109
输入样例:
1000
输出样例:
840
思路:根据反素数的定义:求一个数的约数个数比起小于它的数的约数个数都多的数,可以总结出判定1~n中最大反素数的两条性质:
1、约数个数最多
2、满足上一条性质的前提下,最小的数
因为一个数可以分解为其素因子之积的形式,即:p1^c1*p2^c2*...*pn^cn,
所以,其约数个数为:(c1+1)*(c2+1)*..*(cn+1)
约数之和为:(p1^0+p1^1+..p1^c1)*(p2^0+p2^1+..p2^c2)*...*(pn^0+pn^1+..pn^cn),(因为将该式展开每一项即为一个约数)
这里只用到了约数个数且用到的素数最大29就够了,因此只要<