Cod sursa(job #1563538)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 6 ianuarie 2016 10:48:57
Problema Pascal Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

int R,D,num,sol;
int fact[10],cnt[10];

int main()
{
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);

     scanf("%d %d",&R,&D);

     for (int i = 2;D > 1;i++)
         if (D % i == 0)
         {
             num++;
             fact[num] = i;

             for (;D % i == 0;cnt[num] += D / i,D /= i);
         }

     for (int i = 0;i <= R;i++)
     {
         int x = R,y = R - i,z = i,aux[10];
         bool ok = 1;

         memset(aux,0,sizeof(aux));

         for (int j = 1;j <= num;j++)
         {
             int val = x;

             for (;val;aux[j] += val / fact[j],val /= fact[j]);
         }

         for (int j = 1;j <= num && y;j++)
         {
             int val = y;

             for (;val;aux[j] -= val / fact[j],val /= fact[j]);
         }

         for (int j = 1;j <= num && z;j++)
         {
             int val = z;

             for (;val;aux[j] -= val / fact[j],val /= fact[j]);
         }

         for (int j = 1;j <= num;j++)
             if (cnt[j] > aux[j])
             {
                 ok = 0;
                 break;
             }

         sol += ok;
     }

     printf("%d\n",sol);

  return 0;
}