题解 | #剪绳子(进阶版)#

剪绳子(进阶版)

http://www.nowcoder.com/practice/106f666170554379ab1974e5a601e741

3个数越多答案越大,所以n%3有三种情况:

余数为0直接做3^(n/3)

余数为1做4*3^((n-4)/3)

余数为2做2*3^((n-2)/3)

代码技巧部分:因为指数会很大如果用Math的函数效率低,这种情况可以用快速幂去做,比如a^n次方要n次的相乘,快速幂只需要logn次

import java.util.*;


public class Solution {
  //快速幂函数求a^n次方的结果
    long pow(long a, long n){
        final int MOD = 998244353;;
        long ans = 1;

        while(n>0){
           if(n%2 == 1)ans = (ans*a)%MOD;
           a = (a*a)%MOD;
           n/=2;
       }
       return ans;
    }
    
    public long cutRope (long number) {
        if(number == 2)return 1;
        if(number == 3)return 2;
        
        if(number % 3 == 0)return pow(3,number/3);
        else if(number % 3 == 1)return 4*pow(3,(number-4)/3)%998244353;
        else return (2*pow(3,(number-2)/3))%998244353;
    }
}
全部评论
如果在快速幂中不取模,而是直接对最后计算出的答案取模,最后的答案是错的,这是为什么呢?
点赞 回复 分享
发布于 2024-01-26 19:31 台湾

相关推荐

06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
评论
7
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务