题目
题目描述
对于任何正整数x,其约数的个数记作 g ( x ) g(x) g(x)。例如g(1)=1,g(6)=4。
如果某个正整数x满足: ∀ 0 < i < x ∀ 0 < i < x \forall 0 \lt i \lt x∀0<i<x ∀0<i<x∀0<i<x,都有 g ( x ) > g ( i ) g(x) \gt g(i) g(x)>g(i)则称x为反质数。例如,整数1,2,4,6等都是反质数。
现在给定一个数 N,你能求出不超过 NN 的最大的反质数么?
输入格式
一个数N
输出格式
不超过N的最大的反质数
样例
输入
1000
输出
840
说明/提示
1 ≤ N ≤ 2 × 1 0 9 1≤N≤2×10^9 1≤N≤2×109
思路与证明
第一眼看上去:暴搜,倒着枚举,输出第一个反素数
第二眼:2e9
好吧,暴搜明显是会TLE的,所以我们只能换个思路
g(x)怎么求呢?枚举所有因数然后统计个数吗,太慢了
设 x = ∏ p i k i x=\prod p_i^{k_i} x=∏piki(质因数分解定理),则 g ( x ) = ∏ ( k i + 1 ) g(x)=\prod (k_i+1) g(x)=∏(ki+1)(乘法原理)
有些蒙?举个例子 6 = 2 1 ∗ 3 1 6=2^1*3^1 6=21∗31
6的约数是哪几个呢?
不难想到
2 0 ∗ 3 0 = 1 2^0*3^0=1 20∗3