Cod sursa(job #10757)

Utilizator stef2nStefan Istrate stef2n Data 29 ianuarie 2007 12:12:33
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <stdio.h>

#define infile "pascal.in"
#define outfile "pascal.out"
#define NMAX 5000005

FILE *fin,*fout;
int r,d;
int ind,factor[2][2];
int a[NMAX][2];

void desc()
  {
   switch(d)
         {
          case 2: ind=1;
                  factor[0][0]=2;
                  factor[0][1]=1;
                  break;
          case 3: ind=1;
                  factor[0][0]=3;
                  factor[0][1]=1;
                  break;
          case 4: ind=1;
                  factor[0][0]=2;
                  factor[0][1]=2;
                  break;
          case 5: ind=1;
                  factor[0][0]=5;
                  factor[0][1]=1;
                  break;
          case 6: ind=2;
                  factor[0][0]=2;
                  factor[0][1]=1;
                  factor[1][0]=3;
                  factor[1][1]=1;
                  break;
         }
  }

inline int nr_apar(int n, int div)
  {
   if(n>1 && n%div==0)
     return nr_apar(n/div,div)+1;
   return 0;
  }


int main()
{
int i,j,count=0,ok;
fin=fopen(infile,"r");
fscanf(fin,"%d %d",&r,&d);
fclose(fin);
desc();

for(j=0;j<ind;j++)
   {
    a[0][j]=0;
    for(i=1;i<=r/2+r%2;i++)
        a[i][j] = a[i-1][j] + nr_apar(r-i+1,factor[j][0]) - nr_apar(i,factor[j][0]);
   }

for(i=0;i<=r/2;i++)
   {
    ok=1;
    for(j=0;j<ind;j++)
       if(a[i][j] < factor[j][1])
         ok=0;
    count+=ok;
   }
count<<=1;
if(r%2)
  {
   ok=1;
   i=r/2+1;
   for(j=0;j<ind;j++)
      if(a[i][j] < factor[j][1])
        ok=0;
   count+=ok;
  }

fout=fopen(outfile,"w");
fprintf(fout,"%d\n",count);
fclose(fout);
return 0;
}