很简单的快速幂问题,耽误时间的原因有2,其一是取余的运算法则错了,其二是return函数中不知道啥原因错了,奇怪~
取余的运算法则很有趣
(
a
+
b
)
%
p
=
(
a
%
p
+
b
%
p
)
%
p
(a + b) \% p = (a \% p + b \% p) \% p
(a+b)%p=(a%p+b%p)%p
(
a
∗
b
)
%
p
=
(
a
%
p
∗
b
%
p
)
%
p
(a * b) \% p = (a \% p * b \% p) \% p
(a∗b)%p=(a%p∗b%p)%p
a
b
%
p
=
(
(
a
%
p
)
b
)
%
p
a ^ b \% p = ((a \% p)^b) \% p
ab%p=((a%p)b)%p
class Solution {
public:
long long mod = 1e9+7;
long long myPow(long long base, long long exponent)
{
long long ret = 1;
while(exponent>0)
{
if(0x01 == (exponent&0x01))
ret = (ret*base)%mod;
exponent >>= 1;
base = (base*base)%mod;
}
return ret;
}
int countGoodNumbers(long long n) {
return (int) ((myPow(4, n/2) * myPow(5, n/2+n%2)) % mod);
}
};