Cod sursa(job #483536)

Utilizator cosmyoPaunel Cosmin cosmyo Data 9 septembrie 2010 01:25:17
Problema Pascal Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream.h>
long  e,k,n,d,nr,w,c;
long  x[10];
long t[3]={2,3,5};
long p[7][35];
long cauta(long q,long u)
{long m=(q+u)/2;
 if(q<=u)
  if(w%p[c][m]==0)
	  return cauta(m+1,u);
	else
	  return cauta(q,m-1);
 else
   return q-1;
} 
int main()
{ifstream fin("pascal.in");
  fin>>n>>d;
 fin.close();
long i;  
ofstream fout("pascal.out");
 p[2][0]=p[3][0]=p[5][0]=1;
  for(i=1;i<=30;++i)
    p[2][i]=p[2][i-1]*2,p[3][i]=p[3][i-1]*3,p[5][i]=p[5][i-1]*5;	  
  p[2][31]=30;p[3][31]=15;p[5][31]=12;
 w=n;
	for(k=0;k<=2;++k)
	{c=t[k];
     e=cauta(0,p[c][31]);
     x[t[k]]+=e;
     w/=p[c][e];
	}
 for(i=2;i<=n-1;++i)
 {w=i;
	for(k=0;k<=2&&w>1;++k)
	{c=t[k];
     e=cauta(0,p[c][31]);
	 
     x[t[k]]-=e;
     w/=p[c][e];
	}	 
  w=n-i+1;
	for(k=0;k<=2&&w>1;++k)
	{c=t[k];
     e=cauta(0,p[c][31]);
	 x[t[k]]+=e;
     w/=p[c][e];
	}
  if(d==2||d==5||d==5)
	  if(x[d]>0)
		++nr; 
  if(d==4)
    if(x[2]>1)
      ++nr;
	 if(d==6)
		if(x[2]>0&&x[3]>0)
		 ++nr;
  }
 fout<<nr<<'\n';
fout.close();
return 0;
}