Cod sursa(job #2107840)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 17 ianuarie 2018 19:11:18
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>

using namespace std;

int calcExp(int n, int d)
{
    int rez = 0;
    while(n % d == 0)
        rez++,
        n /= d;
    return rez;
}

int nr[10];

int main()
{
    freopen("pascal.in", "r", stdin);
    freopen("pascal.out", "w", stdout);
    int r, d;
    int v[10], pv[10], lv = 0;
    scanf("%d%d", &r, &d);
    for(int i = 2; d != 1; i++)
    {
        if(d % i == 0)
        {
            v[lv] = i;
            pv[lv] = 0;
            while(d % i == 0)
                d /= i,
                pv[lv]++;
            lv++;
        }
    }
    int rez = 0, ok = 0;
    for(int i = 1; i < (r + 1) / 2; i++)
    {
        ok = 0;
        for(int j = 0; j < lv; j++)
        {
            nr[j] += calcExp(r - i + 1, v[j]);
            nr[j] -= calcExp(i, v[j]);
            if(nr[j] >= pv[j])
                ok++;
        }
        if(ok == lv)
            rez++;
    }
    rez *= 2;
    if(r % 2 == 0)
    {
        ok = 0;
        for(int j = 0; j < lv; j++)
        {
            nr[j] += calcExp(r / 2 + 1, v[j]);
            nr[j] -= calcExp(r / 2, v[j]);
            if(nr[j] >= pv[j])
                ok++;
        }
        if(ok == lv)
            rez++;
    }
    printf("%d", rez);
    return 0;
}