Cod sursa(job #642472)

Utilizator SmarandaMaria Pandele Smaranda Data 1 decembrie 2011 14:36:19
Problema Dirichlet Scor 8
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#include<math.h>
#define MOD 666013

bool p[2000041];
long n;
void read () {
	scanf("%ld",&n);
}

void eratostene (bool e[],long lim) {

	e[0]=1;
	e[1]=1;
	for (long i=2;i<=lim;i++)
		for (long j=i*i;j<=lim;j=j+i)
			e[j]=1;
}

long multiplicitate (long &i , long &x) { 
	long suma=0,numitor=i;
	while (x/numitor) {
		suma=suma+x/numitor;
		numitor*=i;
	}
	return suma;
}

void rez() {
	long e1,e2,e3,nr1,nr2,nr3,expo,t,c,k=1,asd;
	
	nr1=2*n;
	
	eratostene(p,nr1);

	nr2=n;
	nr3=n+1;
	for (long i=1;i<=nr1;i++) {
		if (p[i]==0) {
			e1=multiplicitate(i,nr1);
			e2=multiplicitate(i,nr2);
			e3=multiplicitate(i,nr3);
			expo=e1-e2-e3;
			t=i;
			c=1;
			for (;expo>0;expo>>=1) {
				if (expo&1) 
					c=c*t%MOD;
				t=t*t%MOD;
			}
			k=k*c%MOD;
		}
	}
	printf("%ld\n",k);
}

int main() {
	
	freopen("dirichlet.in","r",stdin);
	freopen("dirichlet.out","w",stdout);
	
	read();
	rez();
	return 0;
}