Cod sursa(job #1740987)

Utilizator mariusn01Marius Nicoli mariusn01 Data 12 august 2016 18:15:20
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
// precalculez la ce putere apar 2,3,5 in descompunerea lui x!
// folosesc asta pentru a calcula apoi la ce putere apar numerele in combinari, folosind
// formula combinarilor

#include <fstream>
#define DIM 5000010

using namespace std;

ifstream fin ("pascal.in");
ofstream fout("pascal.out");

int n, d, sol, x, y;
int D[DIM], T[DIM], C[DIM];
int main () {
    fin>>n>>d;

    if (d == 2 || d == 4 || d == 6) {
        for (int i=2;i<=n;i++) {
            int p = 2;
            D[i] = 0;
            while (p<=i) {
                D[i] +=i/p;
                p*=2;
            }
        }
    }
    if (d == 3 || d == 6) {
        for (int i=2;i<=n;i++) {
            int p = 3;
            T[i] = 0;
            while (p<=i) {
                T[i] +=i/p;
                p*=3;
            }
        }
    }
    if (d == 5) {
        for (int i=2;i<=n;i++) {
            int p = 5;
            C[i] = 0;
            while (p<=i) {
                C[i] +=i/p;
                p*=5;
            }
        }
    }

    if (d == 2) {
        for (int i=1;i<=n;i++) {
            x = D[n] - D[i] - D[n-i];
            if (x)
                sol++;
        }
    }
    if (d == 3) {
        for (int i=1;i<=n;i++) {
            x = T[n] - T[i] - T[n-i];
            if (x)
                sol++;
        }

    }
    if (d == 5) {
        for (int i=1;i<=n;i++) {
            x = C[n] - C[i] - C[n-i];
            if (x)
                sol++;
        }
    }

    if (d == 4) {
        for (int i=1;i<=n;i++) {
            x = D[n] - D[i] - D[n-i];
            if (x>=2)
                sol++;
        }
    }
    if (d == 6) {
        for (int i=1;i<=n;i++) {
            x = D[n] - D[i] - D[n-i];
            y = T[n] - T[i] - T[n-i];
            if (x && y)
                sol++;
        }
    }

    fout<<sol;
    return 0;
}