Cod sursa(job #2089486)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 16 decembrie 2017 16:51:27
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
using namespace std;
ifstream cin("pascal.in");
ofstream cout("pascal.out");
#define c2   for(int i=1;i<=n;i++){d2[i]=d2[i-1];int aux=i;while(aux%2==0){aux/=2;d2[i]++;}}
#define c3   for(int i=1;i<=n;i++){d3[i]=d3[i-1];int aux=i;while(aux%3==0){aux/=3;d3[i]++;}}
#define c5   for(int i=1;i<=n;i++){d5[i]=d5[i-1];int aux=i;while(aux%5==0){aux/=5;d5[i]++;}}
const int nmax=5000000;
int n,k;
int d2[nmax+5];
int d3[nmax+5];
int d5[nmax+5];
int main()
{
    cin>>n>>k;
    int sol;
    if(k==2)
    {
        c2
        sol=0;
        for(int i=0;i<=n;i++)
        {
            int val=d2[n]-d2[n-i]-d2[i];
            if(val>=1)
                sol++;
        }
        cout<<sol;
        return 0;
    }
    if(k==3)
    {
        c3
        sol=0;
        for(int i=0;i<=n;i++)
        {
            int val=d3[n]-d3[n-i]-d3[i];
            if(val>=1)
                sol++;
        }
        cout<<sol;
        return 0;
    }
    if(k==4)
    {
        c2
        sol=0;
        for(int i=0;i<=n;i++)
        {
            int val=d2[n]-d2[n-i]-d2[i];
            if(val>=2)
                sol++;
        }
        cout<<sol;
        return 0;
    }
    if(k==5)
    {
        c5
        sol=0;
        for(int i=0;i<=n;i++)
        {
            int val=d5[n]-d5[n-i]-d5[i];
            if(val>=1)
                sol++;
        }
        cout<<sol;
        return 0;
    }
    if(k==6)
    {
        c2
        c3
        sol=0;
        for(int i=0;i<=n;i++)
        {
            int val2=d2[n]-d2[n-i]-d2[i];
            int val3=d3[n]-d3[n-i]-d3[i];
            if(val2>=1 and val3>=1)
                sol++;
        }
        cout<<sol;
        return 0;
    }
    return 0;
}