Pagini recente » Cod sursa (job #2636405) | Cod sursa (job #452172) | Cod sursa (job #103182) | Cod sursa (job #2518487) | Cod sursa (job #2219081)
package algtest;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class OptimalInfoarena {
final static int DIMENSION_SIZE = 2;
private static BigInteger[][] multiply2DMatrices(BigInteger a[][], BigInteger b[][]) {
BigInteger[][] c = new BigInteger[DIMENSION_SIZE][DIMENSION_SIZE];
for( int i = 0 ; i < DIMENSION_SIZE ; ++i) {
for( int j = 0 ; j < DIMENSION_SIZE ; ++j) {
c[i][j] = new BigInteger("0");
for( int k = 0 ; k < DIMENSION_SIZE ; ++k) {
c[i][j] = c[i][j].add(a[i][k].multiply(b[k][j]));
}
}
}
return c;
}
private static BigInteger optimalSolution(int n) {
BigInteger[][] alpha = {{new BigInteger("1"), new BigInteger("1")},
{new BigInteger("1"), new BigInteger("0")}};
BigInteger[][] termMatrix = {{new BigInteger("1"), new BigInteger("0")},
{new BigInteger("0"), new BigInteger("0")}};
int power_of_alpha = n - 1;
while(power_of_alpha > 0) {
if(power_of_alpha % 2 == 1) {
termMatrix = multiply2DMatrices(termMatrix, alpha);
}
alpha = multiply2DMatrices(alpha, alpha);
power_of_alpha /= 2;
}
return termMatrix[0][0];
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("inout/kfib.in"));
String firstLine = br.readLine();
Matcher matcher = Pattern.compile("\\d+").matcher(firstLine);
matcher.find();
int firstValue = Integer.valueOf(matcher.group());
PrintWriter writer = new PrintWriter("inout/kfib.out", "UTF-8");
writer.println(optimalSolution(firstValue).mod(new BigInteger(("666013"))));
writer.close();
}
}