Cod sursa(job #636343)

Utilizator nandoLicker Nandor nando Data 19 noiembrie 2011 19:10:24
Problema Dirichlet Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 0.91 kb
#include <iostream>
#include <fstream>
using namespace std;

#define MOD 9999991
typedef long long int64;

FILE* fin = fopen("dirichlet.in", "r");
FILE* fout = fopen("dirichlet.out", "w");

int64 euclid(int64 a, int64 b,int64& x,int64& y){
	if (b == 0){
		x = 1,y = 0;
		return a;
	} else {
		int64 x0, y0;		
		euclid(b, a % b, x0, y0);
		
		x = y0;
		y = x0 - y0 * (a / b);
	}
}

int64 invmod(int64 a)
{
	int64 x, n, y;
	euclid(a, MOD, x, y);
	while (x < 0) {
			x += MOD;
	}
	return x;
}

int main()
{
	int n;
	fscanf (fin, "%d ", &n);
	
	int64 a = 1, b = 1;
	
	for (int i = 1; i <= n; ++i) {
		a = (a * i) % MOD;
		b = (b * i) % MOD;
	}
	
	int64 c = (b * (n + 1)) % MOD;
	
	for (int i = n + 1; i <= (n << 1); ++i) {
		a = (a * i) % MOD;
	}
	
	int64 r = ((a * invmod(b)) % MOD * invmod (c)) % MOD;
	
	fprintf (fout, "%lld\n", r);
	
	fclose(fin);
	fclose(fout);
	return 0;
}