Cod sursa(job #10211)

Utilizator crawlerPuni Andrei Paul crawler Data 27 ianuarie 2007 23:32:36
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 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; }