Cod sursa(job #845509)

Utilizator Athena99Anghel Anca Athena99 Data 30 decembrie 2012 22:48:55
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
#include <cassert>
#define dim 5000005;

int v[6],dp[6];

int asdp(int k)
{
    while(k%2==0)
    {
        --v[2];
        k/=2;
    }
    while(k%3==0)
    {
        --v[3];
        k/=3;
    }
    while(k%5==0)
    {
        --v[5];
        k/=5;
    }
}

int asdm(int k)
{
    while(k%2==0)
    {
        ++v[2];
        k/=2;
    }
    while(k%3==0)
    {
        ++v[3];
        k/=3;
    }
    while(k%5==0)
    {
        ++v[5];
        k/=5;
    }
}

int main()
{
    int i=1,n=0,d=0,sol=0,aux=0,m=0;

    assert(freopen("pascal.in","r",stdin));
    assert(freopen("pascal.out","w",stdout));

    assert(scanf("%d%d",&n,&d));
    m=n/2;

    while(d%2==0)
    {
        ++dp[2];
        d/=2;
    }

    while(d%3==0)
    {
        ++dp[3];
        d/=3;
    }

    while(d%5==0)
    {
        ++dp[5];
        d/=5;
    }

    for(i=1; i<m+1; ++i)
    {
        asdm(n-i+1);
        asdp(i);

        if(v[2]>=dp[2] && v[3]>=dp[3] && v[5]>=dp[5])
        {
            if(n==i+i)
                ++sol;
            else
                sol=sol+2;
        }
    }

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

    return 0;
}