Skip to content

Latest commit

 

History

History

1808.Maximize-Number-of-Nice-Divisors

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

1808.Maximize-Number-of-Nice-Divisors

本题的意思是说,如果一个数的分解质因数是a^k1*b^k2*c^k3*...的形式,并且质因数总个数是primefactors = k1+k2+k3+.... 问有多少个它的因数能同时被a,b,c...整除。

显然这种的因数的个数是 k1*k2*k3*...,也就是说每种质因数最少取1个,最多取k个。那么总的组合数就是用乘法原理。于是本题就转化为,已知一堆数的和是固定值,求如何分配这堆数,使得这堆数的乘积的最大值。这道题本质就是343.Integer Break.我们断言当这堆数都相等的时候乘积能最大。那么这堆数究竟分成几份呢?我们想求f = (a/n)^n的最大值,令其导函数等于零,可以得到n等于自然对数e=2.718. 所以结论是,我们尽量将这些数切分出为3和2,其中3越多越好。

假设primeFactor能切分为a个3与b个2的和,那么答案就是``pow(3,a)*pow(2,b)```。注意这个幂可能非常大并且会越界,所以我们需要手工加载快速幂的代码,并在其中嵌入对1e9+7的取模。