Cod sursa(job #3260826)

Utilizator 0021592Grecu rares 0021592 Data 3 decembrie 2024 20:48:20
Problema Gardieni Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>
#include <bitset>
#define int long long
#define lgi (int) lgv[i]
#define lgj (int) lgv[j]
using namespace std;
ifstream in("mins.in");
ofstream out("mins.out");
int mask, j, k, i, n, m, s, lg, best;
int v1[] = {-1, 1};
void fact(int x);
char lgv[1000010];
int32_t ciur[1000010][7];
int32_t main()
{
    in >> n >> m;
    i = 2;
    n--;
    m--;
    if (n > m)
        swap(n, m);
    ciur[i][lgi] = i;
    lgi++;
    for (j = i*2; j <= n; j+=i)
    {
        ciur[j][lgj] = i;
        lgj++;
    }
    for (i = 3; i <= n; i += 2)
        if (lgi == 0)
        {
            ciur[i][lgi] = i;
            lgi++;
            for (j = i*2; j <= n; j+=i)
            {
                ciur[j][lgj] = i;
                lgj++;
            }
        }
    for (i = 1; i <= n; i++)
    {
        s=0;
        lg=lgi;
        for (mask = 1; mask < (1<<lg); mask++)
        {
            int nr = 0, p = 1;
            for (j = 0; j < lg; j++)
                if ((mask&(1<<(j))))
                {
                    nr++;
                    p*=1ll*ciur[i][j];
                }
            s += m/p*v1[nr%2];
        }
        best += m-s;
    }
    out << best;
    return 0;
}