Cod sursa(job #2107860)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 17 ianuarie 2018 19:20:37
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>

using namespace std;

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

int main()
{
    freopen("pascal.in", "r", stdin);
    freopen("pascal.out", "w", stdout);
    int r, d;
    int f2 = 0, f3 = 0, f5 = 0;
    scanf("%d%d", &r, &d);
    while(d % 2 == 0) d /= 2, f2++;
    while(d % 3 == 0) d /= 3, f3++;
    while(d % 5 == 0) d /= 5, f5++;
    int rez = 0, ok = 0;
    int nr2 = 0, nr3 = 0, nr5 = 0;
    for(int i = 1; i < (r + 1) / 2; i++)
    {
        nr2 += calcExp(r - i + 1, 2);
        nr2 -= calcExp(i, 2);
        nr3 += calcExp(r - i + 1, 3);
        nr3 -= calcExp(i, 3);
        nr5 += calcExp(r - i + 1, 5);
        nr5 -= calcExp(i, 5);
        rez += nr2 >= f2 && nr3 >= f3 && nr5 >= f5;
    }
    rez *= 2;
    if(r % 2 == 0 && r != 0)
    {
        nr2 += calcExp(r / 2 + 1, 2);
        nr2 -= calcExp(r / 2, 2);
        nr3 += calcExp(r / 2 + 1, 3);
        nr3 -= calcExp(r / 2, 3);
        nr5 += calcExp(r / 2 + 1, 5);
        nr5 -= calcExp(r / 2, 5);
        rez += nr2 >= f2 && nr3 >= f3 && nr5 >= f5;
    }
    printf("%d", rez);
    return 0;
}