数组+快速幂:由减绳子基础班可以得知,当绳子长度与3取余为1时,取出两个2米的绳子最优;当绳子长度与3取余为2时,取出一个2米的绳子最优。那么剩下绳子长度必然是3的整数倍b=len/3。结果就是a^b。但是b的数值非常大,暴力求解必然超时,所以此时采用快速幂进行求解。就是将b换成2的各个次幂之和。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param number long长整型 
     * @return long长整型
     */
    public long cutRope (long number) {
        // write code here
        if(number <= 3) {
            return number - 1;
        }
        int MOD = 998244353;
        long res = 1;
        if(number % 3 == 1) {
            res *= 4;
            number -= 4;
        }
        if(number % 3 == 2) {
            res *= 2;
            number -= 2;
        }
        long x = number / 3;
        long k = 3;
        while(x != 0) {
            long u = x & 1;
            if(u == 1) {
                res = (res * k) % MOD;
            }
            k = (k * k) % MOD;
            x >>= 1;
        }
        return res;
    }
}