Cod sursa(job #594599)

Utilizator rudarelLup Ionut rudarel Data 8 iunie 2011 15:14:10
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
long long sol,r,d,up[6],down[6];
 
void desc(long long a,long long v[])
{int p;
 p=0;
 if (d==6)
  { while (a%2==0) { p++; a/=2; }
    v[2]+=p; p=0;
    while (a%3==0) { p++; a/=3; }
    v[3]+=p; }
 else if (d==4)
      { while (a%2==0) { p++; a/=2; }
        v[2]+=p; }
      else
      { while (a%d==0) { p++; a/=d; }
        v[d]+=p; }
 }
 
int main()
{long i,j,nr,lim,e;
 FILE *in,*out;
 in=fopen("pascal.in","r"); out=fopen("pascal.out","w");
  
 fscanf(in,"%ld%ld",&r,&d);
  
 nr=r+1;
 if ((r-1)%2==0) lim=(r-1)/2;
 else lim=(r-1)/2+1;
  
 for (i=1;i<=lim;i++)
  { nr--;
    desc(nr,up);
    desc(i,down); e=0;
    if (d==4)
     {
       if (up[2]-down[2]>=2)
        {
         sol+=2; e=1;
        }
     }
      else if (d==6) { if (up[2]-down[2]>=1 && up[3]-down[3]>=1) { sol+=2; e=1; } }
         else if (up[d]-down[d]>=1) { sol+=2; e=1; }
    if (e && i==(r-1)/2+1) sol--;
    }
 fprintf(out,"%ld\n",sol);
 fclose(in); fclose(out);  
 return 0; }