Pagini recente » Cod sursa (job #2169684) | Cod sursa (job #1080949) | Cod sursa (job #1917374) | Cod sursa (job #2906982) | Cod sursa (job #3280988)
#include <bits/stdc++.h>
#pragma GCC optimize("O2")
std::ifstream fin("patrate2.in");
std::ofstream fout("patrate2.out");
const int size = 1e4;
const int base = 1e5;
int n;
int ans[size];
void exp_mod(int*, int);
void product(int*, int*);
void print(int*);
void read();
void solve();
int main()
{
read();
solve();
return 0;
}
void read()
{
fin >> n;
}
void solve()
{
ans[0] = 1;
ans[1] = 2;
exp_mod(ans, n * n + 1);
print(ans);
}
void print(int* ans)
{
fout << ans[ans[0]];
for(int i = ans[0] - 1; i >= 1; --i)
fout << std::setfill('0') << std::setw(5) << ans[i];
}
void product(int a[], int b[])
{
int64_t c[size];
std::memset(c, 0, sizeof(c));
for(int i = 1; i <= a[0]; ++i)
for(int j = 1; j <= b[0]; ++j)
c[i + j - 1] += (int64_t) a[i] * b[j];
c[0] = a[0] + b[0] - 1;
int64_t t = 0;
for(int i = 1; i <= c[0]; ++i)
{
t += c[i];
c[i] = t % base;
t /= base;
}
while(t)
c[++c[0]] = t % base, t /= base;
for(int i = 0; i <= c[0]; ++i)
a[i] = c[i];
}
void exp_mod(int a[], int n)
{
int res[size], baza[size], aux[size];
std::memset(res, 0, sizeof(res));
res[0] = res[1] = 1;
std::memcpy(baza, a, sizeof(res));
while(n)
{
if(n & 1)
product(res, baza);
std::memcpy(aux, baza, sizeof(baza));
product(baza, aux);
n /= 2;
}
std::memcpy(a, res, sizeof(res));
}