using
System;
class
GFG{
static
int
F(
int
N,
int
a,
int
b,
int
m,
int
n)
{
int
[,] F = { { m, 1 }, { n, 0 } };
if
(N == 0)
return
a;
if
(N == 1)
return
b;
if
(N == 2)
return
m * b + n * a;
int
[,] initial = { { m * b + n * a, b },
{ b, a } };
power(F, N - 2, m, n);
multiply(initial, F);
return
F[0, 0];
}
static
void
multiply(
int
[,] F,
int
[,] M)
{
int
x = F[0, 0] * M[0, 0] +
F[0, 1] * M[1, 0];
int
y = F[0, 0] * M[0, 1] +
F[0, 1] * M[1, 1];
int
z = F[1, 0] * M[0, 0] +
F[1, 1] * M[1, 0];
int
w = F[1, 0] * M[0, 1] +
F[1, 1] * M[1, 1];
F[0, 0] = x;
F[0, 1] = y;
F[1, 0] = z;
F[1, 1] = w;
}
static
void
power(
int
[,] F,
int
N,
int
m,
int
n)
{
int
i;
int
[,] M = { { m, 1 }, { n, 0 } };
for
(i = 1; i <= N; i++)
multiply(F, M);
}
public
static
void
Main(String[] args)
{
int
N = 2, a = 0, b = 1, m = 2, n = 3;
Console.WriteLine(F(N, a, b, m, n));
N = 3;
Console.WriteLine(F(N, a, b, m, n));
N = 4;
Console.WriteLine(F(N, a, b, m, n));
N = 5;
Console.WriteLine(F(N, a, b, m, n));
}
}