Cod sursa(job #1237221)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 3 octombrie 2014 13:01:37
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
#define Nmax 5000001
#define Dmax 7

int v[Dmax][Nmax];
int exp(int, int) ;

int main()
{
    int i, r, d, sol = 0, EXP, EXP2;
    fin >> r >> d;
    for(i = 2; i <= r; ++i)
    {
        v[2][i] = v[2][i-1] + exp(2, i);
        v[3][i] = v[3][i-1] + exp(3, i);
        v[5][i] = v[5][i-1] + exp(5, i);
    }

    for(i = 1; i <= r; ++i)
    {
        switch(d)
        {
            case 2:
            {
                EXP = v[2][r] - v[2][r - i] - v[2][i];
                if(EXP > 0) ++sol;
                break;
            }
            case 3:
            {
                EXP = v[3][r] - v[3][r - i] - v[3][i];
                if(EXP > 0) ++sol;
                break;
            }
            case 4:
            {
                EXP = v[2][r] - v[2][r - i] - v[2][i];
                if(EXP > 1) ++sol;
                break;
            }
            case 5:
            {
                EXP = v[5][r] - v[5][r - i] - v[5][i];
                if(EXP > 0) ++sol;
                break;
            }
            case 6:
            {
                EXP = v[2][r] - v[2][r - i] - v[2][i];
                EXP2 = v[3][r] - v[3][r - i] - v[3][i];
                if(EXP > 0 && EXP2 > 0) ++sol;
                break;
            }
        }
    }

    fout << sol << '\n';
    return 0;
}

int exp(int p, int n)
{
    int rez = 0;
    while(n % p == 0) ++rez, n /= p;
    return rez;
}