Cod sursa(job #2498849)

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

int n, d, m, t, i, j, 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++){
        if(i%2==0){
            div2[i]=div2[i/2]+1;
        }
        if(i%3==0){
            div3[i]=div3[i/3]+1;
        }
        if(i%5==0){
            div5[i]=div5[i/5]+1;
        }
    }
    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( min(div2[i], div3[i]) - min(div2[i-j], div3[i-j]) - min(div2[j], div3[j]) > 0 ){
                sol++;
            }
        }
    }
    fout<<sol;
}