# Educational Codeforces Round 13——D. Iterated Linear Function（矩阵快速幂或普通快速幂水题）

D. Iterated Linear Function
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Consider a linear function f(x) = Ax + B. Let's define g(0)(x) = x and g(n)(x) = f(g(n - 1)(x)) for n > 0. For the given integer values ABn and x find the value of g(n)(x) modulo 109 + 7.

Input

The only line contains four integers ABn and x (1 ≤ A, B, x ≤ 109, 1 ≤ n ≤ 1018) — the parameters from the problem statement.

Note that the given value n can be too large, so you should use 64-bit integer type to store it. In C++ you can use thelong long integer type and in Java you can use long integer type.

Output

Print the only integer s — the value g(n)(x) modulo 109 + 7.

Examples
input
3 4 1 1

output
7

input
3 4 2 1

output
25

input
3 4 3 1

output
79

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#define INF 0x3f3f3f3f
#define MM(x) memset(x,0,sizeof(x))
#define MMINF(x) memset(x,INF,sizeof(x))
using namespace std;
typedef long long LL;
struct mat
{
LL pos[2][2];
mat(){MM(pos);}
};
LL a,b,n,x;
const int mod=1e9+7;
inline mat operator*(const mat &a,const mat &b)
{
mat c;
for (int i=0; i<2; i++)
{
for (int j=0; j<2; j++)
{
for (int k=0; k<2; k++)
{
c.pos[i][j]+=(a.pos[i][k]*b.pos[k][j])%mod;
}
}
}
return c;
}
inline mat operator^(mat a,LL b)
{
mat bas=a,r;
for (int i=0; i<2; i++)
r.pos[i][i]=1;
while (b!=0)
{
if(b&1)
r=r*bas;
bas=bas*bas;
b>>=1;
}
return r;
}
int main(void)
{
while (cin>>a>>b>>n>>x)
{
mat one,t;
one.pos[0][0]=x;
one.pos[1][0]=1;
t.pos[0][0]=a;
t.pos[0][1]=b;
t.pos[1][1]=1;
t=t^(n);
one=t*one;
cout<<one.pos[0][0]%mod<<endl;
}
return 0;
}

• 本文已收录于以下专栏：

## CodeForces 678D Iterated Linear Function 矩阵快速幂

CodeForces 678D Iterated Linear Function 矩阵快速幂 题目链接：CodeForces 678D Iterated Linear Function  题意：由递推...
• ACMore_Xiong
• 2016年07月19日 11:48
• 701

## Codeforces 678 D. Iterated Linear Function(构造矩阵)

• qingshui23
• 2016年06月26日 11:40
• 1969

## Educational Codeforces Round 36 题解

• qq_33229466
• 2018年01月14日 00:40
• 275

## Codeforces-678D-Iterated Linear Function

Consider a linear function f(x) = Ax + B. Let’s define g(0)(x) = x and g(n)(x) = f(g(n - 1)(x)) for ...
• Ypopstar
• 2016年09月27日 22:32
• 333

## Educational Codeforces Round 36 (Rated for Div. 2) 题解

• jpwang8
• 2018年01月13日 23:16
• 242

## Educational Codeforces Round 27

A 题意：把2 * n个人分成两组，使得无论两组的人怎么进行比赛 第一组的人始终都要保持全赢，如果两个人能力值相等两人都可以赢 思路：排序后只要保证n + 1个人的能力值大于第n个人的能力值即可 #i...
• sasuke__
• 2017年08月23日 10:35
• 199

## Educational Codeforces Round 13-D. Iterated Linear Function

• qq_26122039
• 2016年06月14日 16:09
• 320

## 【Educational Codeforces Round 33】 D. Credit Card (贪心)

• hmc0411
• 2017年11月24日 11:25
• 663

## Educational Codeforces Round 8 总结

A. Tennis Tournament time limit per test 1 second memory limit per test 256 megabytes ...
• zyx520ytt
• 2016年02月21日 02:47
• 589

## Educational Codeforces Round 13 Iterated Linear Function（数学）

• qq_21057881
• 2016年06月25日 14:44
• 260

举报原因： 您举报文章：Educational Codeforces Round 13——D. Iterated Linear Function（矩阵快速幂或普通快速幂水题） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)