Cod sursa(job #827331)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 1 decembrie 2012 23:10:42
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

using namespace std;

int N, Factor[3] = {2, 3, 5}, DPower[3], Solution;
int Pow[3];

inline int GetPower(int X, const int factor) {
    int power = 0;
    for (; X % factor == 0; ++power, X /= factor);
    return power;
}

inline void UpdatePow(const int k) {
    for (int i = 0; i < 3; ++i)
        Pow[i] += GetPower(N - k + 1, Factor[i]) - GetPower(k, Factor[i]);
}

inline int IsDivisible() {
    for (int i = 0; i < 3; ++i)
        if (Pow[i] < DPower[i])
            return 0;
    return 1;
}

void Solve() {
    for (int k = 1; k <= N / 2; ++k) {
        UpdatePow(k);
        Solution += 2*IsDivisible();
    }
    Solution -= (N % 2 == 0 && IsDivisible());
}

void Read() {
    freopen("pascal.in", "r", stdin);
    int D; scanf("%d %d", &N, &D);
    for (int i = 0; i < 3; ++i)
        for (; D % Factor[i] == 0; ++DPower[i], D /= Factor[i]);
}

void Print() {
    freopen("pascal.out", "w", stdout);
    printf("%d\n", Solution);
}

int main() {
    Read();
    Solve();
    Print();
    return 0;
}