剑指 Offer 14- II. 剪绳子 II(数学+快速幂求余)

在这里插入图片描述
剪绳子1的基础上,加入了快速幂取余

// 快算幂计算过程中使用long long, 避免int溢出
long long  myPow(long long base, long long p, int mod)
{
    long long ret = 1;
    while(p)
    {
        if(p&1)
        {
            ret = ret * base % mod;
        }
        p = p>>1;
        base = base*base % mod;
    }
    return ret;//返回值小于mod
}

int cuttingRope(int n){
    if(n<=3) return n-1;
    int mod = 1000000007;
    int residue = n%3;
    int count = n/3;
    // 返回最终结果前取余
    if(residue == 2) return myPow(3, count, mod)*2%mod;
    else if(residue == 1) return myPow(3, count-1, mod)*4%mod;
    else return myPow(3, count, mod);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值