// C# program to implement the // Generalised Fibonacci numbers using System; class GFG{ // Function to find the Nth term static int F(int N, int a, int b, int m, int n) { // m 1 // n 0 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); // Discussed below multiply(initial, F); return F[0, 0]; } // Function that multiplies // 2 matrices F and M of size 2*2, // and puts the multiplication // result back to F[,] 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; } // Function that calculates F[,] // raised to the power N // and puts the result in F[,] 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); } // Driver code 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)); } } // This code is contributed by shikhasingrajput