D题.[Codeforces 678D] Iterated Linear Function
题目链接
思路:
g
n
(
x
)
=
A
n
x
+
A
n
−
1
B
+
A
n
−
2
B
+
.
.
.
+
A
B
+
B
g^{n}(x)=A^nx+A^{n-1}B+A^{n-2}B+...+AB+B
gn(x)=Anx+An−1B+An−2B+...+AB+B
应用等比数列前
n
n
n项和公式,
g
n
(
x
)
=
x
+
n
B
g^{n}(x)=x+nB
gn(x)=x+nB,
A
=
1
A=1
A=1
g
n
(
x
)
=
A
n
x
+
B
(
A
n
−
1
)
A
−
1
g^{n}(x)=A^nx+\frac{B(A^n-1)}{A-1}
gn(x)=Anx+A−1B(An−1),
A
>
1
A>1
A>1
根据公式用快速幂求幂和逆元。
//AC code
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MOD = 1e9 + 7;
LL qpow(LL x,LL e){
LL re = 1;
while(e){
if(e & 1){
re = re * x % MOD;
}
x = x * x % MOD;
e >>= 1;
}
return re % MOD;
}
LL a,b,n,x,ans;
int main(){
cin>>a>>b>>n>>x;
if(a == 1)ans = (x + n % MOD * b) % MOD;
else ans = (b * (qpow(a,n) - 1) % MOD * qpow(a - 1,MOD - 2) % MOD + qpow(a,n) * x % MOD) % MOD;
cout<<ans;
}