Cod sursa(job #2342381)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 12 februarie 2019 19:30:42
Problema Pascal Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>

using namespace std;
ifstream fin ("pascal.in");
ofstream fout ("pascal.out");
struct chestie
{
    int val, exp;
};
chestie p[2];
int r, d, ex[2], k, j, nr, a;
int exponent(int a, int b)
{
    int k=0;
    while(a%b==0)
    {
        a=a/b;
        k++;
    }
    return k;
}
void rutina()
{
    for(int l=0;l<=k;l++)
        {
            ex[l]+=exponent(r-j+1, p[l].val);
            ex[l]-=exponent(j, p[l].val);
        }
        bool ok=1;
        for(int l=0;l<=k;l++)
            if(ex[l]<p[l].exp)
            {
                ok=0;
                break;
            }
        if(ok)
            nr++;
}

int main()
{
    fin >> r >> d;
    if(r<2)
    {
        fout << 0;
        return 0;
    }
    a=2;
    k=-1;
    while(a*a<=d)
    {
        if(d%a==0)
        {
            k++;
            p[k].val=a;
            while(d%a==0)
            {
                d=d/a;
                p[k].exp++;
            }
        }
        a++;
    }
    if(d!=0)
    {
        k++;
        p[k].val=d;
        p[k].exp=1;
    }

    for(j=1;j<=(r-1)/2;j++)
        rutina();
    nr=nr*2;
    if(r%2==0)
        rutina();

    fout << nr;
    return 0;
}