Mai intai trebuie sa te autentifici.

Cod sursa(job #2498869)

Utilizator mirceaisherebina mircea mirceaishere Data 24 noiembrie 2019 17:30:27
Problema Pascal Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");

int n, d, m, t, i, j, aux, k, div2[5000010], div3[5000010], div5[5000010], sol;

int main(){
    fin>>n>>d;
    if(d==1){
        fout<<n+1;
        return 0;
    }
    /// precalculez puterea divizorilor de 2, 3, 5 lui " i! " deoarece d <= 6
    for(i=1; i<=n; i++){
        div2[i]=div2[i-1];
        aux=i;
        while(aux%2==0){
            div2[i]++;
            aux/=2;
        }
        div3[i]=div3[i-1];
        aux=i;
        while(aux%3==0){
            div3[i]++;
            aux/=3;
        }
        div5[i]=div5[i/5];
        aux=i;
        while(aux%5==0){
            div5[i]++;
            aux/=5;
        }
    }
    i=n;
    for(j=0; j<=n; j++){
        /// i!/((i-j)!*j!)
        if(d==2){
            if(div2[i]-div2[i-j]-div2[j]>0){
                sol++;
            }
        }
        if(d==3){
            if(div3[i]-div3[i-j]-div3[j]>0){
                sol++;
            }
        }
        if(d==5){
            if(div5[i]-div5[i-j]-div5[j]>0){
                sol++;
            }
        }
        if(d==4){
            if(div2[i]/2-div2[i-j]/2-div2[j]/2>0){
                sol++;
            }
        }
        if(d==6){
            if(div2[i]-div2[i-j]-div2[j]>0 && div3[i]-div3[i-j]-div3[j]>0){
                sol++;
            }
        }
    }
    fout<<sol;
}