Cod sursa(job #2162440)

Utilizator giotoPopescu Ioan gioto Data 12 martie 2018 11:03:49
Problema Mins Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>
using namespace std;

int Sol, n, m, d[50], fact[5002], p[5002], f[5002], put[5002][6];
int main()
{
    freopen("mins.in", "r", stdin);
    freopen("mins.out", "w", stdout);
    scanf("%d%d", &n, &m);
    if(n < m){
        int aux = n;
        n = m;
        m = aux;
    }
    d[1] = 2; d[2] = 3; d[3] = 5; d[4] = 7; d[5] = 11; d[6] = 13; d[7] = 17;
    d[8] = 19; d[9] = 23; d[10] = 29; d[11] = 31; d[12] = 37; d[13] = 41;
    d[14] = 43; d[15] = 47; d[16] = 49; d[17] = 53; d[18] = 59; d[19] = 61;
    d[20] = 67; d[21] = 71;
    Sol = 1;
    for(int i = 2; i < n ; ++i){
        int x = i;
        for(int t = 1; t <= 21 ; ++t){
            if(x % d[t] == 0) put[i][++put[i][0]] = d[t];
            while(x % d[t] == 0) x = x / d[t];
        }
        if(x > 1) put[i][++put[i][0]] = x;
    }
    for(int i = 2; i < n ; ++i){
        if(i < m)Sol += 2;
        else ++Sol;
        for(int j = 2; j < m; ++j){
            int ok = 1;
            for(int t = 1; t <= put[j][0] ; ++t)
                if(i % put[j][t] == 0) {ok = 0; break;}
            Sol = Sol + ok;
        }
    }
    printf("%d", Sol);
    return 0;
}