Cod sursa(job #3167602)

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

using namespace std;

using ll = long long;

char leg2[2500005], leg3[2500005], leg5[2500005]; // legx[i] exp lui x la i!

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

    int r, d;
    cin>>r>>d;
    for(int i=1; i<=r; i++)
    {
        ll sus=2;
        while(sus <= i)
        {
            leg2[i]+=i/sus;
            sus*=sus;
        }
        sus=3;
        while(sus <= i)
        {
            leg3[i]+=i/sus;
            sus*=sus;
        }
        sus=5;
        while(sus <= i)
        {
            leg5[i]+=i/sus;
            sus*=sus;
        }
    }
    int ans=0;
    for(int i=0; i<=(r)/2; 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;
}