Cod sursa(job #2913751)

Utilizator Luca_CristianZamfir Luca-Cristian Luca_Cristian Data 16 iulie 2022 18:09:33
Problema Mins Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <iostream>


using namespace std;
ifstream fin("mins.in");
ofstream fout("mins.out");


const int MAXN = 1e6;

int vmarcaj[MAXN], primes[MAXN];
int np;

int marcaj(int n)
{
    for(int i = 2; i <= n; i++)
    {
        if(vmarcaj[i] == 0)
        {
            primes[np++] = i;
            for(int d = i; d <= n; d += i)
               vmarcaj[d]++;
        }
    }

    int i = 0;
    while((long long)primes[i] * primes[i] <= n && i < np)
    {
        int patrat = primes[i] * primes[i];

        for(int d = patrat; d <= n; d += patrat)
            vmarcaj[d] = - 1;/// multiplu de patrat de numar prim
        i++;
    }
}

int main()
{
    int c, d, i;

    fin >> c >> d;

    int n = min(c - 1, d - 1);
    marcaj(n);

    long long sol = (long long)((c - 1) * (d - 1));
    for(i = 2; i <= n; i++)
    {
        if(vmarcaj[i] != -1)
        {
            long long nr = (((c - 1) / i) * ((d - 1) / i));
            if(vmarcaj[i] % 2)
                sol -= nr;
            else
                sol += nr;
        }
    }
    fout << sol;

    return 0;
}