Cod sursa(job #147951)

Utilizator marinMari n marin Data 3 martie 2008 19:14:39
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <stdio.h>
#include <stdlib.h>
#define DIM 5000001

int v[DIM],w[DIM];
int n,d,d1,d2,i,j,k,nr,dd,ddw,r,t;

int main(){
  FILE *f = fopen("pascal.in","r");
  fscanf(f,"%d %d",&n,&d);
  fclose(f);
  if ((d==2)||(d==3)||(d==5)){
    for (i=1;i<=n;i++) {
      j=i;
      k=0;
      while (j%d==0) {
	k++;
	j/=d;
      }
      v[i]=k+v[i-1];
    }
    for (i=0;i<=(n+1)/2-1;i++) {
      dd = v[n]-v[i]-v[n-i];
      if (dd>0) nr+=2;
    }
    if (n%2==0) {
      i=n/2;
      dd = v[n]-v[i]-v[n-i];
      if (dd>0) nr+=1;
    }
  } else if (d==4) {
    d=2;
    for (i=1;i<=n;i++) {
      j=i;
      k=0;
      while (j%d==0) {
	k++;
	j/=d;
      }
      v[i]=k+v[i-1];

    }

    for (i=0;i<=(n+1)/2-1;i++) {
      t = v[i]+v[n-i];
//      if (t%2==1) t--;
      r = v[n];
//      if (r%2==1) r--;
      dd = r-t;
      if (dd>1) nr+=2;
    }
    if (n%2==0) {
      i=n/2;
      t = v[i]+v[n-i];
//      if (t%2==1) t--;
      r = v[n];
//      if (r%2==1) r--;
      dd = r-t;
      if (dd>1) nr+=1;
    }
  } else {
    d1=2;d2=3;
    for (i=1;i<=n;i++) {
      j=i;
      k=0;
      while (j%d1==0) {
	k++;
	j/=d1;
      }
      v[i]=k+v[i-1];

      j=i;
      k=0;
      while (j%d2==0) {
	k++;
	j/=d2;
      }
      w[i]=k+w[i-1];
    }

    for (i=0;i<=(n+1)/2-1;i++) {
      dd = v[n]-v[i]-v[n-i];
      ddw = w[n]-w[i]-w[n-i];
      if ((dd>0)&&(ddw>0)) nr+=2;
    }
    if (n%2==0) {
      i=n/2;
      dd = v[n]-v[i]-v[n-i];
      ddw = w[n]-w[i]-w[n-i];
      if ((dd>0)&&(ddw>0)) nr+=1;
    }


  }
  FILE *g = fopen("pascal.out","w");
  fprintf(g,"%d",nr);
  fclose(g);
  return 0;
}