Cod sursa(job #2195826)

Utilizator AndreiVisoiuAndrei Visoiu AndreiVisoiu Data 17 aprilie 2018 13:48:30
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <iostream>

using namespace std;

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

int legendre(int n, int k) {
    int s = 0, exp = k;
    while(exp <= n) {
        s += n/exp;
        exp *= k;
    }
    return s;
}

int main()
{
    int r, d, s = 0, ap[2];
    in >> r >> d;
    if(d == 6) {
        ap[0] = legendre(r, 2);
        ap[1] = legendre(r, 3);
        for(int j = 1, n = r/2; j <= n; j++) {
            if(ap[0] - legendre(j, 2) - legendre(r-j, 2) > 0 && ap[1] - legendre(j, 3) - legendre(r-j, 3) > 0)
                s++;
        }
        s *= 2;
        if(r%2 == 0) s--;
    } else if (d == 4) {
        ap[0] = legendre(r, 2);
        for(int j = 1, n = r/2; j <= n; j++) {
            if(ap[0] - legendre(j, 2) - legendre(r-j, 2) > 1)
                s++;
        }
        s *= 2;
        if(r%2 == 0) s--;
    } else {
        ap[0] = legendre(r, d);
        for(int j = 1, n = r/2; j <= n; j++) {
            if(ap[0] - legendre(j, d) - legendre(r-j, d) > 0)
                s++;
        }
        s *= 2;
        if(r%2 == 0) s--;
    }

    out << s;
    return 0;
}