c++ 不执行long long unsigned整数之间的条件内的指令

py49o6xq  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(152)

在下面的代码中,我试图找到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是没有意义的。

gblwokeq

gblwokeq1#

如果需要最大值,从x = 45开始,并且x > fact / 2是退出循环的唯一途径,则必须至少达到n! / 2以45为底的对数。
极限值是7,因为45**6 <= 14! / 245**7 > 14! / 2
@Raymond Chen建议的钢笔和铅笔是正确的选择。

相关问题