Pagini recente » Cod sursa (job #227513) | Razvy | Cod sursa (job #1336767) | Cod sursa (job #881318) | Cod sursa (job #1394433)
#include <fstream>
#define NMax 1000001
#define MOD 1000003
using namespace std;
ifstream f("mergesort.in");
ofstream g("mergesort.out");
int n, fact[NMax], funct[NMax], inv[NMax];
void gcd(int &x, int &y, int a, int b)
{
if (!b)
x = 1, y = 0;
else
{
gcd(x, y, b, a % b);
int aux = x;
x = y;
y = aux - y * (a / b);
}
}
int main()
{
f>>n;
n++;
fact[0] = 1;
for (int i=1; i<=n; ++i)
fact[i] = (1LL * fact[i-1] * i) % MOD;
for (int i=1; i<=n; i++) {
int ins;
gcd(inv[i], ins, fact[i], MOD);
if (inv[i] <= 0)
inv[i] = MOD + inv[i] % MOD;
}
// comb[1][0]=1;
// comb[1][1]=1;
// for (int i=2; i<=n; i++)
// for (int j=0; j<=n; j++)
// comb[i][j] = (comb[i-1][j-1] + comb[i-1][j]) % MOD;
funct[1] = 1;
for (int l=2; l<=n; l++) {
int b = l / 2;
int a = l - b;
int comb = (1LL * fact[l] * inv[l-a] * inv[a]) % MOD;
funct[l] = (1LL * comb * (1LL * funct[a] * fact[b] + 1LL * funct[b] * fact[a]) + fact[l] - 2) % MOD;
}
g<<funct[n-1];
return 0;
}