Cod sursa(job #1202781)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 29 iunie 2014 15:53:52
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <cstdio>

using namespace std;

int vp(int n, int p)
{
    int vpn=0;
    while(n%p==0)
    {
        vpn++;
        n/=p;
    }
    return vpn;
}
int n;

int main()
{
    freopen("pascal.in", "r", stdin);
    freopen("pascal.out", "w", stdout);
    int d, lim, nr=0;
    scanf("%d%d", &n, &d);
    lim=n/2;
    if(d==2 || d==3 || d==5)
    {
        int vnew, vold, vtotal=0;
        for(int i=1;i<=lim;i++)
        {
            vnew=vp(i, d);
            vold=vp(n-i+1, d);
            vtotal+=(vold-vnew);
            if(vtotal>0)nr++;
        }
        nr*=2;
        if(n%2==0 && vtotal>0)nr--;
        printf("%d", nr);
    }
    else if(d==6)
    {
        int vnew2, vold2, vnew3, vold3, vtotal2=0, vtotal3=0;
        for(int i=1;i<=lim;i++)
        {
            vnew2=vp(i, 2);
            vold2=vp(n-i+1, 2);
            vtotal2+=(vold2-vnew2);
            vnew3=vp(i, 3);
            vold3=vp(n-i+1, 3);
            vtotal3+=(vold3-vnew3);
            if(vtotal2>0 && vtotal3>0)nr++;
        }
        nr*=2;
        if(n%2==0 && vtotal2>0 && vtotal3>0)nr--;
        printf("%d", nr);
    }
    else if(d==4)
    {
        int vnew, vold, vtotal=0;
        for(int i=1;i<=lim;i++)
        {
            vnew=vp(i, 2);
            vold=vp(n-i+1, 2);
            vtotal+=(vold-vnew);
            if(vtotal>1)nr++;
        }
        nr*=2;
        if(n%2==0 && vtotal>1)nr--;
        printf("%d", nr);
    }
    return 0;
}