Cod sursa(job #148965)

Utilizator katakunaCazacu Alexandru katakuna Data 5 martie 2008 08:34:54
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<stdio.h>

long int v[4],t2[4],t1[4],c,c1,c2,xj2,b,xj,r,a,aux,d,n,i,xi,nr;

int main(){

FILE *f=fopen("pascal.in","r");
fscanf(f,"%ld %ld",&n,&d);
fclose(f);


if(d==4){
d=2;
xi=0;

  for(i=d;i<=n;i*=i){
  xi+=(n/i);
  }


b=xi;
xj=xi;
xj2=0;

  for(i=1;i<=n-1;i++){
  a=n-i+1;
  b=0;

    while(a%d==0){
    b++;
    a/=d;
    }

  aux=i;

  xj-=b;

  b=0;

   while(aux%d==0){
   b++;
   aux/=d;
   }

  xj2+=b;

  c=xi-(xj+xj2);
   if(c/2>=1)nr++;

}

}

else{

if(d==6){



 for(i=2;i<=n;i*=d){
 v[2]+=(n/i);
 }

 for(i=3;i<=n;i*=d){
 v[3]+=(n/i);
 }

t1[2]=v[2];
t1[3]=v[3];


   for(i=1;i<=n-1;i++){
   a=n-i+1;

      while(a%2==0){
      t1[2]--;
      a/=2;
      }

   a=n-i+1;

       while(a%3==0){
       t1[3]--;
       a/=3;
       }

   a=i;

      while(a%2==0){
      t2[2]++;
      a/=2;
      }

   a=i;

       while(a%3==0){
       t2[3]++;
       a/=3;
       }


    if((v[2]-(t1[2]+t2[2]))>0 && ( (v[3]-(t1[3]+t2[3]))>0 ) ){
    nr++;
    }


   }


}


else{
i=d;
xi=0;

  for(i=d;i<=n;i*=i){
  xi+=(n/i);
  }


b=xi;
xj=xi;
xj2=0;

  for(i=1;i<=n-1;i++){
  a=n-i+1;
  b=0;

    while(a%d==0){
    b++;
    a/=d;
    }

  aux=i;

  xj-=b;

  b=0;

   while(aux%d==0){
   b++;
   aux/=d;
   }

  xj2+=b;

   if(xi>xj+xj2)nr++;


  }

}
}

 FILE *g=fopen("pascal.out","w");
 fprintf(g,"%ld",nr);
 fclose(g);


return 0;
}