Cod sursa(job #2650827)

Utilizator tudorbuhniaTudor Buhnia tudorbuhnia Data 20 septembrie 2020 13:20:25
Problema Pascal Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
using namespace std;
int v2[5000005],v3[5000005],v5[5000005];
void calc2()
{
    int m=2,cnt=0;
    for(int i=1;i<=22;i++)
    {
        for(int j=m;j<=5000000;j+=m)
            v2[j]++;
        m=m*2;
    }
    for(int i=0;i<=500000;i++)
    {
        cnt+=v2[i];
        v2[i]=cnt;
    }
}
void calc3()
{
    int m=3,cnt=0;
    for(int i=1;i<=14;i++)
    {
        for(int j=m;j<=5000000;j+=m)
            v3[j]++;
        m=m*3;
    }
    for(int i=0;i<=500000;i++)
    {
        cnt+=v3[i];
        v3[i]=cnt;
    }
}
void calc5()
{
    int m=5,cnt=0;
    for(int i=1;i<=9;i++)
    {
        for(int j=m;j<=5000000;j+=m)
            v5[j]++;
        m=m*5;
    }
    for(int i=0;i<=500000;i++)
    {
        cnt+=v5[i];
        v5[i]=cnt;
    }
}
int main()
{
    ifstream cin("pascal.in");
    ofstream cout("pascal.out");
    int r,d,cnt=0;
    cin >> r >> d;
    calc2();
    calc3();
    calc5();
    for(int c=0;c<=r;c++)
    {
        if(d==2)
        {
            if(v2[r]-v2[c]-v2[r-c]>0)
                cnt++;
        }
        if(d==3)
        {
            if(v3[r]-v3[c]-v3[r-c]>0)
                cnt++;
        }
        if(d==4)
        {
            if(v2[r]-v2[c]-v2[r-c]>1)
                cnt++;
        }
        if(d==5)
        {
            if(v5[r]-v5[c]-v5[r-c]>0)
                cnt++;
        }
        if(d==6)
        {
            if(v2[r]-v2[c]-v2[r-c]>0 && v3[r]-v3[c]-v3[r-c]>0)
                cnt++;
        }
    }
    cout << cnt;
    return 0;
}