これが長さnのロープです。ロープを整数の長さのm個のセグメントに切断してください(mとnは整数、n> 1とm> 1)。各ロープの長さはk [0]、k [1です。 ] ... k [m-1]。k [0] k [1] …* k [m-1]の可能な最大の積は何ですか?たとえば、ロープの長さが8の場合、2、3、3の長さで3つに切断します。この時点で得られる最大の積は18です。
答えは1e9 + 7(1000000007)を法とする必要があります。計算の初期結果が1000000008の場合は、1を返します。
オファー14-Iよりも残りを見つける
例1:
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1
例2:
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36
促す:
2 <= n <= 1000
注:この質問は、メインのWebサイトの質問343と同じです:https://leetcode-cn.com/problems/integer-break/
class Solution {
public:
int cuttingRope(int n) {
if (n <= 3) return n - 1;
int b = n % 3, p = 1000000007;
long rem = 1, x = 3;
//下面为快速幂方法,其中多了求余数部分,
// n / 3 - 1是为了留出来一个“3”,
for (int a = n / 3 - 1; a > 0; a /=2 ) {
if ((a & 1) == 1) {
rem = (rem * x) % p;
}
x = (x * x) % p;
}
if (b == 0) return (int) (rem * 3 % p);//3就是快速幂留出来的3
if (b == 1) return (int) (rem * 4 % p);//4就是3+1,因为相乘所以4等于2*2
return (int) (rem * 6 % p);6就是3+2那一段绳子,因为相乘所以6等于3*2
}
};
多数の残り:
著者:jyd
リンク:https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/solution/mian-shi-ti-14-ii-jian-sheng-zi-iitan-xin-er -fen-f /
出典:LeetCode(LeetCode)の
著作権は作者に帰属します。商用の転載の場合は、著者に連絡して許可を求め、非商用の転載の場合は、出典を示してください。