Cod sursa(job #893609)

Utilizator darrenRares Buhai darren Data 26 februarie 2013 16:48:34
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>

using namespace std;

int R, D;
int p0, p1, p2;
int total; // 2, 3 sau 5 (ca divizori primi)

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

    fin >> R >> D;

    for (int i = 2; i <= R; i *= 2) p0 += R / i;
    for (int i = 3; i <= R; i *= 3) p1 += R / i;
    for (int i = 5; i <= R; i *= 5) p2 += R / i;

    for (int i = 1; i < R; ++i)
    {
        // R! / i! * (R - i)!

        int d0 = 0, d1 = 0, d2 = 0;
        for (int j = 2; j <= i; j *= 2) d0 += i / j;
        for (int j = 3; j <= i; j *= 3) d1 += i / j;
        for (int j = 5; j <= i; j *= 5) d2 += i / j;
        for (int j = 2; j <= R - i; j *= 2) d0 += (R - i) / j;
        for (int j = 3; j <= R - i; j *= 3) d1 += (R - i) / j;
        for (int j = 5; j <= R - i; j *= 5) d2 += (R - i) / j;

        d0 = p0 - d0;
        d1 = p1 - d1;
        d2 = p2 - d2;

        if (D == 2 && d0) ++total;
        if (D == 3 && d1) ++total;
        if (D == 4 && d0 >= 2) ++total;
        if (D == 5 && d2) ++total;
        if (D == 6 && d0 && d1) ++total;
    }

    fout << total;

    fin.close();
    fout.close();
}