Cod sursa(job #2769128)

Utilizator Y.MalmsteenB.P.M. Y.Malmsteen Data 13 august 2021 16:40:12
Problema Pascal Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>

int R, D,
    fp[3], ex[3], nf,
    ed[3];

void descfp()
{
    switch(D)
    {
    case 2:
    case 3:
    case 5:
        nf = 1;
        fp[1] = D;
        ex[1] = 1;
        break;
    case 4:
        nf = 1;
        fp[1] = 2;
        ex[1] = 2;
        break;
    case 6:
        nf = 2;
        fp[1] = 2;
        fp[2] = 3;
        ex[1] = ex[2] = 1;
    }
}

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

int divid(int k)
{
    int ok = 1;
    for(int i = 1; i <= nf; i++)
    {
        ed[i] += expp(R - k + 1, fp[i]) - expp(k, fp[i]);
        if(ed[i] < ex[i])
            ok = 0;
    }
    return ok;
}

int main()
{
    freopen("pascal.in", "r", stdin);
    freopen("pascal.out", "w", stdout);
    int nrd = 0;
    scanf("%i %i", &R, &D);
    if(R >= 2)
    {
        descfp();
        int r2 = (R + 1) / 2;
        for(int k = 1; k < r2; k++)
            nrd += divid(k);
        nrd *= 2;
        if(R % 2 == 0)
            nrd += divid(r2);
    }
    printf("%i", nrd);
    fclose(stdin);
    fclose(stdout);
    return 0;
}