Cod sursa(job #1753290)

Utilizator nurof3nCioc Alex-Andrei nurof3n Data 6 septembrie 2016 12:16:17
Problema Mins Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MAX = 1000001;

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

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

int main()
{
    int c, d; //Datele de intrare
    f >> c >> d;
    c--, d--;
    int n = min(c, d);
    long long m = 1LL * c * d; //Numarul de segmente (initial este egal cu numarul de puncte)
    for(int i = 2; i <= n; 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)
                m += t;
            else
                m -= t;
        }
    }
    g << m << endl;
    f.close();
    g.close();
    return 0;
}