Cod sursa(job #2500664)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 28 noiembrie 2019 14:34:10
Problema Pascal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <fstream>
#include <iostream>
using namespace std;

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

int n,m,d,p[6][5000001],i,j,jum,p2,p3,p5,cnt;
//int fact[6][5000001];

int main(){
    fin>>n>>d;

    for(i=2;i<=n;i++){
        if(i%2==0)
            p[2][i]=p[2][i/2]+1;
        if(i%3==0)
            p[3][i]=p[3][i/3]+1;
        if(i%5==0)
            p[5][i]=p[5][i/5]+1;

//        fact[2][i]=fact[2][i-1]+p[2][i];
//        fact[3][i]=fact[3][i-1]+p[3][i];
//        fact[5][i]=fact[5][i-1]+p[5][i];
    }

//    for(i=1;i<=n;i++)
//        cout<<i<<" - "<<p[2][i]<<" "<<p[3][i]<<" "<<p[5][i]<<"\n";


    /// combinari de n luate cate i: n!/ (i! * (n-i)!)
    /// la fiecare pas inm cu n-i+1 si impart la i


    if(d==2){
        for(i=1;i<=n;i++){
            p2+=p[2][n-i+1]-p[2][i];
            p3+=p[3][n-i+1]-p[3][i];
            p5+=p[5][n-i+1]-p[5][i];

            if(p2>0)
                cnt++;
        }
    }

    if(d==3){
        for(i=1;i<=n;i++){
            p2+=p[2][n-i+1]-p[2][i];
            p3+=p[3][n-i+1]-p[3][i];
            p5+=p[5][n-i+1]-p[5][i];

            if(p3>0)
                cnt++;
        }
    }

    if(d==5){
        for(i=1;i<=n;i++){
            p2+=p[2][n-i+1]-p[2][i];
            p3+=p[3][n-i+1]-p[3][i];
            p5+=p[5][n-i+1]-p[5][i];

            if(p5>0)
                cnt++;
        }
    }

    if(d==4){
        for(i=1;i<=n;i++){
            p2+=p[2][n-i+1]-p[2][i];
            p3+=p[3][n-i+1]-p[3][i];
            p5+=p[5][n-i+1]-p[5][i];

            if(p2>1)
                cnt++;
        }
    }

    if(d==6){
        for(i=1;i<=n;i++){
            p2+=p[2][n-i+1]-p[2][i];
            p3+=p[3][n-i+1]-p[3][i];
            p5+=p[5][n-i+1]-p[5][i];

            if(p2>0 && p3>0)
                cnt++;
        }
    }

    fout<<cnt;

    return 0;
}