Cod sursa(job #1094039)

Utilizator A63N7pTudor Nazarie A63N7p Data 28 ianuarie 2014 20:54:44
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
using namespace std;

ifstream in;
ofstream out;

int r, d, m, v[10], sol;

void decomp(int x, int y);
inline int div();

int main(int argc, char *argv[])
{
    in.open("pascal.in");
    out.open("pascal.out");
    in >> r >> d;
    m = r;
    for (int i = 1; i <= m / 2; i++,r--) {
        decomp(r, i);
        if (div())
            sol += 2;
    }
    if (m % 2 == 0 && div())
        sol--;
    out << sol << endl;
    in.close();
    out.close();
    return 0;
}

void decomp(int x, int y)
{
    while (x % 2 == 0) {
        x /= 2;
        v[2]++;
    }

    while (x % 3 == 0) {
        x /= 3;
        v[3]++;
    }

    while (x % 5 == 0) {
        x /= 5;
        v[5]++;
    }

    while (y % 2 == 0) {
        y /= 2;
        v[2]--;
    }

    while (y % 3 == 0) {
        y /= 3;
        v[3]--;
    }

    while (y % 5 == 0) {
        y /= 5;
        v[5]--;
    }
}

inline int div()
{
    return (d == 4 && v[2] > 1) || (d == 6 && v[2] > 0 && v[3] > 0) || (v[d] > 0) ? 1 : 0;
}