题目描述
给你一个正整数 primeFactors 。你需要构造一个正整数 n ,它满足以下条件:
n 质因数(质因数需要考虑重复的情况)的数目 不超过 primeFactors 个。
n 好因子的数目最大化。如果 n 的一个因子可以被 n 的每一个质因数整除,我们称这个因子是 好因子 。比方说,如果 n = 12 ,那么它的质因数为 [2,2,3] ,那么 6 和 12 是好因子,但 3 和 4 不是。
请你返回 n 的好因子的数目。由于答案可能会很大,请返回答案对 10^9 + 7 取余 的结果。
请注意,一个质数的定义是大于 1 ,且不能被分解为两个小于该数的自然数相乘。一个数 n 的质因子是将 n 分解为若干个质因子,且它们的乘积为 n 。
思路分析
- 首先将这个问题转为"将一个数拆分为若干数,求这些数积的最大值"的问题
- 通过数学函数最值推导,得到拆分尽可能多的3是最合适的
- dp也可以,但这里还要与快速幂相结合,因为还要对10^9 + 7 取余
- 注意过程中,大数的处理,强制类型转化等等
源代码如下
class Solution {
public:
int L;
int maxNiceDivisors(int primeFactors) {
L=1e9+7;
auto Pow=[&](int a,int n)->int{
int ans=1;
while(n){
if(n&1)
ans=(long long)ans*a%L;
a=(long long)a*a%L;
n>>1;
}
return ans;
};
int t=primeFactors%3;
int f=primeFactors/3;
if(t==0) return (long long)Pow(3,f)%L;
else if(t==1) return (long long)Pow(3,f-1)*4%L;
else return (long long)Pow(3,f)*2%L;
}
};