Cod sursa(job #2136260)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 19 februarie 2018 19:48:44
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#define DIM 5000001
using namespace std;
int n,d,i,x,nr,sol,v[DIM],w[DIM];
ifstream fin ("pascal.in");
ofstream fout ("pascal.out");

int main (){

    fin>>n>>d;
    /// calculam puterea la care apare d in n!/(n-j)!*j!, j = 0...n
    /// v[i] - puterea la care apare d in i!
    if (d != 6){
        if (d == 4)
            x = 2;
        else /// x == 4
            x = d;
        for (i=1;i<=n;i++){
            nr = i;
            while (nr % x == 0){
                v[i]++;
                nr /= x;
            }
            v[i] += v[i-1];
        }
    }
    else{ /// d == 6;
        for (i=1;i<=n;i++){
            nr = i;
            while (nr % 2 == 0){
                v[i]++; /// pentru 2
                nr /= 2;
            }
            while (nr % 3 == 0){
                w[i]++; /// pentru 3
                nr /= 3;
            }
            v[i] += v[i-1];
            w[i] += w[i-1];
        }
    }

    for (i=1;i<=n;i++){
        if (d != 6){
            if (d != 4){
                if (v[n] - (v[n-i] + v[i]) > 0)
                    sol++;
            }
            else
                if (v[n] - (v[n-i] + v[i]) > 1)
                    sol++;
        }
        else
            if (v[n]- (v[n-i] + v[i]) > 0 && w[n] - (w[n-i] + w[i]) > 0 )
                sol++;
    }
    fout<<sol;

    return 0;
}