Pagini recente » Cod sursa (job #599456) | Cod sursa (job #3210472) | Cod sursa (job #701235) | Cod sursa (job #1823578) | Cod sursa (job #3139782)
// solutie pentru cazul cand ai k pana la 10 ^9 si nu faci modulo pisano(666013 = 1332028(pisano))
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#define MOD 666013
#define ll long long
using namespace std;
ll a[2][2], b[2][2], n;
void inmultire(ll a[2][2], ll b[2][2])
{
ll c[2][2] = {0};
for(int i = 0; i < 2; ++i)
{
for(int j = 0; j < 2; ++j)
{
for(int k = 0; k < 2; ++k)
{
c[i][j] = (c[i][j] + 1ll * a[i][k] * b[k][j]) % MOD;
}
}
}
for(int i = 0; i < 2; ++i)
{
for(int j = 0; j < 2; ++j)
{
a[i][j] = c[i][j];
}
}
}
void power(ll a[2][2], ll b[2][2], ll n) // fii antena la cum se ridica matricea la putere
{
while(n > 0)
{
if(n % 2 == 1)
{
inmultire(b, a);
}
inmultire(a, a);
n /= 2;
}
}
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int main()
{
ios_base::sync_with_stdio(0);
fin.tie(0);
fout.tie(0);
fin >> n;
a[0][1] = 1;
a[0][0] = 0;
a[1][0] = 1;
a[1][1] = 1;
b[0][0] = b[1][1] = 1;
b[1][0] = b[0][1] = 0;
power(a, b, n);
fout << b[0][1];
return 0;
}