Cod sursa(job #3167606)

Utilizator dragusanu.raresDragusanu Rares dragusanu.rares Data 10 noiembrie 2023 21:44:16
Problema Pascal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <fstream>
using namespace std;
/**
int exp(int nr,int a){
    int cnt=0;
    while(nr%a==0){
        cnt++;
        nr/=a;
    }
    return cnt;
}**/
int exponent_2[5000005];
int exponent_3[5000005];
int exponent_5[5000005];
int main(){///C(n,k)=n!/k!/(n-k)!
           ///C(n,k+1)=n!/(k+1)!/(n-k-1)!
           ///C(n,k+1)=C(n,k)*(n-k)*k
    ifstream cin("pascal.in");
    ofstream cout("pascal.out");
    for(int p=2;p<5000005;p*=2){
        for(int i=p;i<5000005;i+=p){
            exponent_2[i]++;
        }
    }
    for(int p=3;p<5000005;p*=3){
        for(int i=p;i<5000005;i+=p){
            exponent_3[i]++;
        }
    }
    for(int p=5;p<5000005;p*=5){
        for(int i=p;i<5000005;i+=p){
            exponent_5[i]++;
        }
    }
    /**
    for(int i=1;i<=100;i++){
        cout<<i<<" "<<exponent_2[i]<<" "<<exponent_3[i]<<" "<<exponent_5[i]<<"\n";
    }**/
    int n,d,e2=0,e3=0,e5=0,cnt=0;
    cin>>n>>d;
    if(d==2){
        for(int i=1;i<=n;i++){
            e2=e2+exponent_2[n-i+1]-exponent_2[i];
            e3=e3+exponent_3[n-i+1]-exponent_3[i];
            e5=e5+exponent_5[n-i+1]-exponent_5[i];
            if(e2>0)cnt++;
        }
    }
    if(d==3){
        for(int i=1;i<=n;i++){
            e2=e2+exponent_2[n-i+1]-exponent_2[i];
            e3=e3+exponent_3[n-i+1]-exponent_3[i];
            e5=e5+exponent_5[n-i+1]-exponent_5[i];
            if(e3>0)cnt++;
        }
    }
    if(d==4){
        for(int i=1;i<=n;i++){
            e2=e2+exponent_2[n-i+1]-exponent_2[i];
            e3=e3+exponent_3[n-i+1]-exponent_3[i];
            e5=e5+exponent_5[n-i+1]-exponent_5[i];
            if(e2>1)cnt++;
        }
    }
    if(d==5){
        for(int i=1;i<=n;i++){
            e2=e2+exponent_2[n-i+1]-exponent_2[i];
            e3=e3+exponent_3[n-i+1]-exponent_3[i];
            e5=e5+exponent_5[n-i+1]-exponent_5[i];
            if(e5>0)cnt++;
        }
    }
    if(d==6){
        for(int i=1;i<=n;i++){
            e2=e2+exponent_2[n-i+1]-exponent_2[i];
            e3=e3+exponent_3[n-i+1]-exponent_3[i];
            e5=e5+exponent_5[n-i+1]-exponent_5[i];
            if(e2>0&&e3>0)cnt++;
        }
    }
    cout<<cnt;
}