Pagini recente » Cod sursa (job #619247) | Cod sursa (job #184825) | Cod sursa (job #1029967) | Cod sursa (job #2049192) | Cod sursa (job #2483)
Cod sursa(job #2483)
# 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;
}