Cod sursa(job #3350794)

Utilizator EricDimiCismaru Eric-Dimitrie EricDimi Data 13 aprilie 2026 10:02:13
Problema Pascal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>

using namespace std;

ifstream f("pascal.in");
ofstream g("pascal.out");

int R, D;

struct Factor
{
    int fact, exp;
    Factor(int f = 0, int e = 0)
    {
        this->fact = f;
        this->exp = e;
    }
};
Factor F[2];
int cnt;

void Init()
{
    if(D == 2 || D == 3 || D == 5)
        F[cnt++] = Factor(D, 0);
    else
    if(D == 4)
        F[cnt++] = Factor(2, 0);
    else // if(D == 6)
    {
        F[cnt++] = Factor(2, 0);
        F[cnt++] = Factor(3, 0);
    }
}

void Update(int n, int t)
{
    int aux = n;
    for(int i = 0; i < cnt; i++)
    {
        n = aux;
        while(n % F[i].fact == 0)
        {
            F[i].exp += t;
            n /= F[i].fact;
        }
    }
}

inline void Mult(int n) { Update(n, 1); }
inline void Div(int n) { Update(n, -1); }

bool Verif()
{
    if(D != 4)
    {
        for(int i = 0; i < cnt; i++)
            if(F[i].exp <= 0)
                return false;
        return true;
    }
    return F[0].exp >= 2;
}

int main()
{
    f >> R >> D;
    Init();
    int res = 0;
    for(int i = 1; i <= (R >> 1); i++)
    {
        Mult(R - i + 1);
        Div(i);
        if(Verif())
            res += 2;
    }
    if(!(R & 1) && Verif())
        res--;
    g << res << '\n';
    f.close();
    g.close();
    return 0;
}