这道题其实是一个很经典的套路,设这个数可以被分解成
的形式,那么答案就是
问题可以归结成一个数分解成若干个数 然后如何分乘积最大
这种题有个结论:
如果%3==0,就是都分成3相乘
如果%3==1,就是都分成3 然后留4 *2*2
如果%3==2 就是留个2
数据范围比较大,上快速幂
class Solution {
public:
const int mod=1e9+7;
int qmi(int x,int y){
int res=1;
while(y){
if(y&1)res=(long long)res%mod*x%mod;
x=(long long)x%mod*x%mod;
y>>=1;
}
return res%mod;
}
int maxNiceDivisors(int p) {
if(p<=3){
return p;
}
else{
if(p%3==0){
return qmi(3,p/3);
}
else if(p%3==1){
return qmi(3,(p-4)/3)%mod*2%mod*2%mod;
}
else{
return qmi(3,(p-2)/3)*2%mod;
}
}
return -1;
}
};