Pagini recente » Cod sursa (job #26058) | Cod sursa (job #1115505) | Cod sursa (job #1593858) | Cod sursa (job #2657125) | Cod sursa (job #1832323)
#include <stdio.h>
#include <string.h>
#define MOD 666013
long long A[2][2] = {{0, 1},
{1, 1}};
void Matrix_2D_Multiply(long long A[2][2], long long B[2][2]){
long long a, b, c, d;
a = (((A[0][0]%MOD)*(B[0][0]%MOD))%MOD + ((A[0][1]%MOD)*(B[1][0]%MOD))%MOD)%MOD;
b = (((A[0][0]%MOD)*(B[0][1]%MOD))%MOD + ((A[0][1]%MOD)*(B[1][1]%MOD))%MOD)%MOD;
c = (((A[1][0]%MOD)*(B[0][0]%MOD))%MOD + ((A[1][1]%MOD)*(B[1][0]%MOD))%MOD)%MOD;
d = (((A[1][0]%MOD)*(B[0][1]%MOD))%MOD + ((A[1][1]%MOD)*(B[1][1]%MOD))%MOD)%MOD;
A[0][0] = a;
A[0][1] = b;
A[1][0] = c;
A[1][1] = d;
}
long long Expo(long long A[2][2], long long b){
long long result[2][2] = {{1, 0},
{0, 1}};
while (b){
if(b&1){
Matrix_2D_Multiply(result, A);
}
b >>= 1;
Matrix_2D_Multiply(A, A);
}
A[0][0] = result[0][0];
A[0][1] = result[0][1];
A[1][0] = result[1][0];
A[1][1] = result[1][1];
}
int main(){
FILE *file1, *file2;
long long i, j, K;
file1 = fopen("kfib.in", "r");
file2 = fopen("kfib.out", "w");
fscanf(file1, "%lld", &K);
Expo(A, K+1);
fprintf(file2, "%lld", A[0][0]);
return 0;
}