Cod sursa(job #1679643)

Utilizator deeagrtAndGrt deeagrt Data 8 aprilie 2016 09:39:14
Problema Al k-lea termen Fibonacci Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.5 kb

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {
	
	int[][] power (int[][] v,int n){
		if (n==0) {
			int[][] res = new int[v.length][v.length];
			for (int i = 0;i<v.length;i++)
				res[i][i] = 1;
			return res;
		}
		else if (n%2 == 1){
			int [][] p = power(v,(n-1)/2);
			int [][]d = new int[v.length][v.length];
			int [][]sol = new int[v.length][v.length];
			for (int i = 0;i<v.length;i++)
				for (int j = 0;j<v.length;j++)
					for (int k = 0;k<v.length; k++)
						d[i][j] += p[i][k] *p[k][j];
			for (int i = 0;i<v.length;i++)
				for (int j = 0;j<v.length;j++)
					for (int k = 0;k<v.length; k++)
						sol[i][j] += d[i][k] *v[k][j];
			return sol;
		}
		else {			int [][] p = power(v,(n)/2);
		int [][]d = new int[v.length][v.length];
		for (int i = 0;i<v.length;i++)
			for (int j = 0;j<v.length;j++)
				for (int k = 0;k<v.length; k++)
					d[i][j] += p[i][k] *p[k][j];
		return d;
		}
			
	}
public static void main(String[] args) throws IOException {
	Scanner in = new Scanner(new FileReader ("kfib.in"));
	PrintWriter out = new PrintWriter(new FileWriter("kfib.out"));
	int nr = in.nextInt();
	int[][] i = new int[2][2];
	i[0][1] = 1;
	i[1][0] = 1;
	i[1][1] = 1;
	Main p = new Main();
	i = p.power(i, nr-1);
	int []sol = new int[2];
	sol[0] = i[1][0];
	sol[1] = i[1][1];
	out.println(String.valueOf(sol[1]));
	
	
	
	in.close();
	out.close();
}
}