Cod sursa(job #3167614)

Utilizator Turcanu_DavidTurcanu David Turcanu_David Data 10 noiembrie 2023 21:52:58
Problema Pascal Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

using ll = long long;

int leg2[5000005], leg3[5000005], leg5[5000005]; // legx[i] exp lui x la i!

int32_t main()
{
    ifstream cin("pascal.in");
    ofstream cout("pascal.out");

    int r, d;
    cin>>r>>d;
    leg2[2]=1;
    leg3[3]=1;
    leg5[5]=1;
    for(int i=2; i<=r; i++)
    {
        if(i > 2)
            leg2[i]=leg2[i/2]+1;
        if(i > 3)
            leg3[i]=leg3[i/3]+1;
        if(i > 5)
            leg5[i]=leg5[i/5]+1;
    }
    for(int i=1; i<=r; i++)
    {
        leg2[i]+=leg2[i-1];
        leg3[i]+=leg3[i-1];
        leg5[i]+=leg5[i-1];
    }
    int ans=0;
    for(int i=0; i<=r; i++)
    {
        // r!/((r-i)!*i!)
        // de la r-i+1 la r
        // te uiti la imp cu 2 3 si 5
        // formula lui legandre
        int e2=leg2[r]-leg2[r-i]-leg2[i];
        int e3=leg3[r]-leg3[r-i]-leg3[i];
        int e5=leg5[r]-leg5[r-i]-leg5[i];
        //cout<<r<<" "<<i<<" "<<e2<<" "<<e3<<" "<<e5<<'\n';
        //if(i == r/2 && r%2 == 0)
        //    ans*=2;
        if(d == 2 && e2 > 0)
            ans++;
        if(d == 3 && e3 > 0)
            ans++;
        if(d == 4 && e2 > 1)
            ans++;
        if(d == 5 && e5 > 0)
            ans++;
        if(d == 6 && e2 > 0 && e3 > 0)
            ans++;
    }
    //if(r%2 == 1)
    //    ans*=2;
    cout<<ans;
    return 0;
}