Cod sursa(job #179515)

Utilizator pandaemonAndrei Popescu pandaemon Data 15 aprilie 2008 23:34:00
Problema Pascal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
#include<iostream.h>
#define RMAX 5000001

long r,aux,i,j,sol,d,fac1[RMAX],fac2[RMAX];

void putere_2(long &x)
{
  long var=i;

  while( (var & 1) ==0 )
  {
    x++; var = (var>>1);

  }

}

void putere_f(long &x, long d)
{
   long var=i;

   while( var%d == 0 )
   {
     x++; var/=d;

   }

}

int main()
{
 freopen("pascal.in","r",stdin);
 freopen("pascal.out","w",stdout);

 scanf("%ld %ld",&r,&d);

 if(d==4)    for(i=1;i<=r;i++)  { putere_2(fac1[i]);   fac1[i]+=fac1[i-1]; }


 if(d==6)    for(i=1;i<=r;i++) { putere_2(fac1[i]);    fac1[i]+=fac1[i-1];
				 putere_f(fac2[i], 3); fac2[i]+=fac2[i-1]; }


 if(d==3 || d==5)
	     for(i=1;i<=r;i++) { putere_f(fac1[i], d); fac1[i]+=fac1[i-1]; }


 if(d==2)    for(i=1;i<=r;i++) { putere_2(fac1[i]);    fac1[i]+=fac1[i-1]; }


 for(i=0; i<=r; i++)
 {
   if(d==4) {
	      if( fac1[r] - fac1[r-i] - fac1[i] > 1 ) sol++;

	      continue;  }

   if(d==6) {
      if ( (fac1[r] - fac1[r-i] - fac1[i] > 0)
	   && (fac2[r] - fac2[r-i] - fac2[i] > 0)  ) sol++;

	   continue; }

   if( fac1[r] - fac1[r-i] - fac1[i] > 0 ) sol++;
 }


 printf("%ld\n",sol); return 0;
}