(LeetCode 每日一题)1922. 统计好数字的数目 (数论 、快速幂)

题目:1922. 统计好数字的数目

(LeetCode 每日一题)1922. 统计好数字的数目 (数论 、快速幂)_第1张图片
(LeetCode 每日一题)1922. 统计好数字的数目 (数论 、快速幂)_第2张图片

思路:偶数位,可填的数有5个;奇数位,可填的数有4个。n很大,使用快速幂。时间复杂度0(logn)。

C++版本:

class Solution {
public:
    typedef long long LL;
    const int mod=1e9+7;
    LL qmi(LL x,LL q,int mod){
        LL res=1;
        while(q){
            if(q&1) res=res*x%mod;
            x=x*x%mod;
            q>>=1;
        }
        return res;
    }
    int countGoodNumbers(long long n) {
        LL x=(n+1)/2;
        LL y=n/2;
        return qmi(5,x,mod)%mod*qmi(4,y,mod) %mod;
    }
};

JAVA版本:

class Solution {
public:
    typedef long long LL;
    const int mod=1000000007;
    LL qmi(LL x,LL q,int mod){
        LL res=1;
        while(q){
            if(q&1) res=res*x%mod;
            x=x*x%mod;
            q>>=1;
        }
        return res;
    }
    int countGoodNumbers(long long n) {
        LL x=(n+1)/2;
        LL y=n/2;
        return qmi(5,x,mod)%mod*qmi(4,y,mod) %mod;
    }
};

Go版本:

const mod = 1000000007
func countGoodNumbers(n int64) int {
    x := (n+1)/2
    y := n/2
    return (int) (qmi(5,x,mod)%mod *qmi(4,y,mod) %mod);
}
func qmi(x , q ,mod int64) int64 {
    var res int64 = 1
    for q>0 {
        if q&1==1 {
            res = res * x %mod
        }
        x=x*x%mod
        q>>=1
    }
    return res
}

你可能感兴趣的:(java版刷题,LeetCode,golang版刷题,leetcode,算法,职场和发展,c++,java,golang)