Pagini recente » Cod sursa (job #254649) | Cod sursa (job #1517523) | Borderou de evaluare (job #2056564) | Cod sursa (job #2339379) | Cod sursa (job #3242365)
//package kfib;
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static final String INPUT_FILE = "kfib.in";
static final String OUTPUT_FILE = "kfib.out";
public static class TokenizedReader {
private final BufferedReader reader;
private StringTokenizer tokenizer;
TokenizedReader(String filePath) throws FileNotFoundException {
reader = new BufferedReader(new FileReader(filePath));
}
private String nextToken() {
while (tokenizer == null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(reader.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
}
private int nextInt() {
return Integer.parseInt(nextToken());
}
public void close() throws IOException {
reader.close();
}
}
public static void main(String[] args) throws IOException {
TokenizedReader reader = new TokenizedReader(INPUT_FILE);
PrintWriter writer = new PrintWriter(OUTPUT_FILE);
solve(reader, writer);
reader.close();
writer.flush();
writer.close();
}
private static final int MOD = 666013;
public static void solve(TokenizedReader reader,
PrintWriter writer) {
int n = reader.nextInt();
long[][] FIB_MATRIX = new long[][]{
{0, 1},
{1, 1}
};
long[][] pow = pow2(FIB_MATRIX, n);
writer.println(pow[1][0]);
}
private static long[][] pow2(long[][] matrix, int exp) {
long[][] base = Arrays.copyOf(matrix, 2);
long[][] temp = new long[][]{{1, 0}, {0, 1}};
if (exp == 0) {
return temp;
}
while (exp > 0) {
if (exp % 2 == 0) {
multiplyMatrices(base, base, 2);
exp /= 2;
} else {
multiplyMatrices(temp, base, 2);
exp--;
}
}
return temp;
}
private static void multiplyMatrices(long[][] a, long[][] b, int n) {
long[][] c = new long[n][n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
c[i][j] = 0;
for (int k = 0; k < n; ++k) {
c[i][j] = (c[i][j] + (a[i][k] * b[k][j]) % MOD) % MOD;
}
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
a[i][j] = c[i][j];
}
}
}
}