Cod sursa(job #2595511)

Utilizator nick.cocont nou nick.co Data 7 aprilie 2020 20:41:56
Problema Al k-lea termen Fibonacci Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.17 kb
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;

public class Main {
	public static final String IN_FILE = "kfib.in";
	public static final String OUT_FILE = "kfib.out";
	public static int MOD = 666013;
	
	public static int[] mult(int[] a, int[] b) {
		int[] aux = {
			((a[0] * b[0]) % MOD + (a[1] * b[2]) % MOD) % MOD,
			((a[0] * b[1]) % MOD + (a[1] * b[3]) % MOD) % MOD,
			((a[2] * b[0]) % MOD + (a[3] * b[2]) % MOD) % MOD,
			((a[2] * b[1]) % MOD + (a[3] * b[3]) % MOD) % MOD
		};
		return aux;
	}
	
	public static int[] pow_log(int[] a, int e) {
		int[] aux = {1, 0, 0, 1};
		if (e == 0) {
			return aux;
		}
		if (e == 1) {
			return a;
		}
		aux = pow_log(a, e / 2);
		aux = mult(aux, aux);
		if (e % 2 == 1) {
			aux = mult(aux, a);
		}
		return aux;
	}
	
	public static void main(String[] args) throws IOException {
		int[] fibs = {1, 1, 1, 0};
		
		Scanner scanner = new Scanner(new FileInputStream(IN_FILE));
		
		int numIn = scanner.nextInt();
		
		scanner.close();
		
		PrintStream printer = new PrintStream(OUT_FILE);
		
		int[] res = pow_log(fibs, numIn);
		
		printer.println(res[1]);
		
		printer.close();
	}

}