Cod sursa(job #1416764)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 8 aprilie 2015 21:34:07
Problema Mins Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

int c , d , i , j , ii , jj , drepte;

int pm[5010][6];

bool ok;
bool ciur[5010];

int main()
{
    freopen("mins.in","r",stdin);
    freopen("mins.out","w",stdout);

    scanf("%d %d", &c, &d);

    for (i = 2; i <= max(c , d); ++i)
     if (!ciur[i]) for (j = i; j <= max(c , d); j += i)
    {
        pm[j][++pm[j][0]] = i;
        ciur[j] = true;
    }

    for (i = 2; i < min(c , d); ++i)
     for (j = 1; j < i; ++j)
    {
        jj = 1; bool ok = false;
        for (ii = 1; ii <= pm[i][0] && pm[j][0]; ++ii)
        {
            while (pm[j][jj] < pm[i][ii] && jj < pm[j][0]) jj++;
            if (pm[i][ii] == pm[j][jj]) ok = true;
        }

        if (!ok) drepte++;
    }

    drepte *= 2; drepte++;

    for (i = min(c , d); i < max(c , d); ++i)
     for (j = 1; j < min(c , d); ++j)
    {
        jj = 1; bool ok = false;
        for (ii = 1; ii <= pm[i][0] && pm[j][0]; ++ii)
        {
            while (pm[j][jj] < pm[i][ii] && jj < pm[j][0]) jj++;
            if (pm[i][ii] == pm[j][jj]) ok = true;
        }

        if (!ok) drepte++;

    }

    printf("%d\n", drepte);

    return 0;
}