题目:1922. 统计好数字的数目
思路:偶数位,可填的数有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
}