Cod sursa(job #2838826)

Utilizator AndreiAlexandru2k3Ciucan Andrei Alexandru AndreiAlexandru2k3 Data 24 ianuarie 2022 18:18:45
Problema Mins Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("mins.in");
ofstream g("mins.out");

const int MAX = 1000001;

int ciurn[MAX],///Vector al numarului de divizori primi
    ciurp[MAX],///Ciurul numerelor divizibile cu patrate de numere prime(i.e. la care nu toti divizorii primi nu sunt distincti)
    c, d, n;

long long card;

void calcul(int i)
{
    if(ciurn[i] == 0)
    {
        for(int j = i; j <= n; j += i)
            ciurn[j]++;
        long long k = 1LL * i * i;
        for(long long jj = k; jj <= n; jj += k)
            ciurp[jj] = 1;
    }
    if(ciurp[i]==0)
    {
        long long t=1LL*(c/i)*(d/i);
        if(ciurn[i]%2==0)
            card-=t;
        else
            card+=t;
    }
}

int main()
{
    f>>c>>d;
    c--;
    d--;
    n=min(c,d);
    for(int i=2;i<=n;i++)
        calcul(i);
    g<<1LL*c*d-card;
    f.close();
    g.close();
    return 0;
}