Cod sursa(job #2483)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 17 decembrie 2006 12:12:40
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
# include <stdio.h>

const long int MAX=5000000; //AICI!!! 5000000
long int nr6[MAX+1]={0},nrd[MAX+1]={0};

int main()
{
long int i,n,p;int d,fac,needed;
//C(n,k) -> calculeam prezenta puterilor in factoriale de la 1 la N
FILE *f=fopen("pascal.in","r");
fscanf(f,"%ld%d",&n,&d);

if (d==4) fac=2;
else if (d==6) fac=3;
else fac=d;

nrd[fac]=1;
for (i=fac+1;i<=n;i++)
	{
	p=1;
	while (p*fac<=i) p*=fac;
	nrd[i]=(p-1)/(fac-1)+nrd[i-p];
	}

if (d==4) needed=2;
else needed=1;

if (d==6)
{
fac=2;
nr6[fac]=1;
for (i=fac+1;i<=n;i++)
	{
	p=1;
	while (p*fac<=i) p*=fac;
	nr6[i]=(p-1)/(fac-1)+nr6[i-p];
	}
}

long int nr=0;
if (d!=6) {for (i=1;i<=n;i++) if (nrd[n]-nrd[i]-nrd[n-i]>=needed) nr++;}
else {for (i=1;i<=n;i++) if (nrd[n]-nrd[i]-nrd[n-i]&&nr6[n]-nr6[i]-nr6[n-i]) nr++;}

FILE *g=fopen("pascal.out","w");
fprintf(g,"%ld\n",nr);
fcloseall();
return 0;
}