Cod sursa(job #1425236)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 27 aprilie 2015 02:35:03
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 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++) {

        if (i % 2 == 0) div2[i] = div2[i / 2] + 1;
        if (i % 3 == 0) div3[i] = div3[i / 3] + 1;
        if (i % 5 == 0) div5[i] = div5[i / 5] + 1;
    }

    int sol = 0, D2 = 0, D3 = 0, D5 = 0;
    for (int i = 0; i <= N; i++) {

        D2 = D2 + div2[N - i + 1] - div2[i];
        D3 = D3 + div3[N - i + 1] - div3[i];
        D5 = D5 + div5[N - i + 1] - div5[i];

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

        sol++;
    }

    out<<sol;
}