Cod sursa(job #347546)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 12 septembrie 2009 17:51:54
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <stdio.h>
#include <math.h>
#define Nmax 100005
#define Mmax 1000000001
#define Dmax 12

int edc[Dmax],edm[Dmax],dm[Dmax],zdm;
int n,m,z,x,i;
int sol;

void baga(int x,int s){
	int i;
   for(i=1;i<=zdm;++i)
     while(x % dm[i] == 0){
     		x /= dm[i];
         edc[i] += s;
     }
}

int bun(){
	int i;
   for(i=1;i<=zdm;++i) if( edm[i] > edc[i] ) return 0;
   return 1;
}

int main(){
	int k;
	freopen("pascal.in","r",stdin);
   freopen("pascal.out","w",stdout);
   scanf("%d%d",&n,&m);
   edm[1]=1;
   if( m == 2) dm[1]=2, zdm=1; else
   if( m == 3) dm[1]=3, zdm=1; else
   if( m == 4) dm[1]=2, zdm=1, edm[1]=2; else
   if( m == 5) dm[1]=5, zdm=1; else
   if( m == 6) dm[1]=2, dm[2]=3, edm[2]=1, zdm=2;

   for(k=1;k<=n;++k){
   //	baga(n-k+1,1);
   	x=n-k+1;
         for(i=1;i<=zdm;++i)
     		while(x % dm[i] == 0){
     		   x /= dm[i];
            ++edc[i];
         }
   // baga(k,-1);
   x=k;
        for(i=1;i<=zdm;++i)
        while(x % dm[i] == 0){
       		x /= dm[i];
            --edc[i];
        }
        for(i=1;i<=zdm;++i) if( edm[i] > edc[i] ) break;
        if(i == zdm+1) sol++;

   }

   printf("%d\n",sol);
	fclose(stdin); fclose(stdout);
   return 0;
}