Mai intai trebuie sa te autentifici.
Cod sursa(job #3326461)
| Utilizator | Data | 29 noiembrie 2025 08:45:13 | |
|---|---|---|---|
| Problema | Mins | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.97 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("mins.in");
ofstream g("mins.out");
const int NMAX = 1000001;
int ciurn[NMAX], ///Vector al numarului de divizori primi
ciurp[NMAX], ///Ciurul numerelor divizibile cu patrate de numere prime
c, d, n; ///(i.e. la care nu toti divizorii primi sunt distincti)
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;
}
