Cod sursa(job #19709)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 19 februarie 2007 21:01:56
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<stdio.h>
long n,m,p,i,s,j,k,var1,var2;
int afisare()
{
 printf("%ld \n",k);
 return 0;
}
long descomp(long p,long k)
{
 long u=k,nr=0;
 while (p/u>0)
  {
  nr+=p/u;
  u*=k;
  }
  return nr;
 }
int caz2()
{
 long aux2,var2,aux;
 var1=descomp(n,2);
 var2=descomp(n,3);
 for(j=0;j<n;j++)
  {
  aux=var1;
  aux2=var2;
  aux-=descomp(n-j,2);
  aux2-=descomp(n-j,3);
  aux-=descomp(j,2);
  aux2-=descomp(j,3);
  if ((aux>0)&&(aux2>0)) k++;
  }
 return 0;
}
int caz3()
{
 long i=0,u,aux;
 u=2;
 while (n/u>0)
 {
  i++;
  s+=n/u;
  u*=2;
  }
 aux=s;
 for(j=0;j<n;j++)
  {
  aux-=descomp(n-j,2);
  aux-=descomp(j,2);
  if (aux>1) k++;
  }
 return 0;
}
int caz1()
{
 long i=0,u,aux;
 u=m;
 while (n/u>0)
 {
  i++;
  s+=n/u;
  u*=m;
  }
  for(j=0;j<n;j++)
  {
  aux=s;
  aux-=descomp(n-j,m);
  aux-=descomp(j,m);
  if (aux>0) k++;
  }
  return 0;
}
int main()
{
 freopen("pascal.in","r",stdin);
 freopen("pascal.out","w",stdout);
 scanf("%ld %ld",&n,&m);
 if ((m==2)||(m==3)||(m==5)) caz1();
 if (m==6) caz2();
 if (m==4) caz3();
 afisare();
 return 0;
}