在下面的代码中,我试图找到p(p是整数)最大的数,其中45^p是n的除数!(n是整数)。
int n = 14;
long long unsigned int fact = 1;
for(int i = 1; i <= n; i++){
fact *= i;
}
bool until = true;
int ans;
// for goes until x is greater half of factorial
for(int i = 1; until; i++){
long long unsigned int x = 1;
for(int j = 1; j <= i; j++){
x *= 45;
}
if(fact/2 < x){
until = false;
}
else{
if(fact % x == 0){
ans = i;
}
}
}
cout << ans;
}
然而,当我试图在x大于阶乘的一半的地方结束循环时,由于某种原因,循环一直持续到45^7,它应该在45^5停止,这里的数字小于n的一半!,为什么会发生这种情况?
P.D:我不是说程序不返回我想要的数字(它返回ans = 2,这是真的),但继续计算x是没有意义的。
1条答案
按热度按时间gblwokeq1#
如果需要最大值,从
x = 45
开始,并且x > fact / 2
是退出循环的唯一途径,则必须至少达到n! / 2
以45为底的对数。极限值是7,因为
45**6 <= 14! / 2
和45**7 > 14! / 2
。@Raymond Chen建议的钢笔和铅笔是正确的选择。