Pagini recente » Cod sursa (job #2801493) | Cod sursa (job #1836772) | Cod sursa (job #2468031) | Cod sursa (job #1061362) | Cod sursa (job #2838826)
#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;
}