Cod sursa(job #1425235)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 27 aprilie 2015 02:29:01
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>

#define Nmax 5000005

std::ifstream in("pascal.in");
std::ofstream out("pascal.out");

int div2[Nmax], div3[Nmax], div5[Nmax], rez[10];

int main() {
    int N, D;
    in >> N >> D;

    while (D % 2 == 0) {
        rez[2]++;
        D /= 2;
    }
    while (D % 3 == 0) {
        rez[3]++;
        D /= 3;
    }
    while (D % 5 == 0) {
        rez[5]++;
        D /= 5;
    }

    div2[0] = div3[0] = div5[0] = 0;
    for (int i = 1; i <= N; i++) {
        div2[i] = div2[i - 1];
        div3[i] = div3[i - 1];
        div5[i] = div5[i - 1];

        int k = i;
        while ((k & 1) == 0) div2[i]++, k >>= 1;
        k = i;
        while (k % 3 == 0) div3[i]++, k /= 3;
        k = i;
        while (k % 5 == 0) div5[i]++, k /= 5;
    }

    int sol = 0;
    for (int i = 0; i <= N; i++) {
        int D2 = div2[N] - div2[i] - div2[N - i];
        int D3 = div3[N] - div3[i] - div3[N - i];
        int D5 = div5[N] - div5[i] - div5[N - i];

        if (rez[2] > D2) continue;
        if (rez[3] > D3) continue;
        if (rez[5] > D5) continue;

        sol++;
    }

    out<<sol;
}