Pagini recente » Cod sursa (job #1783949) | Cod sursa (job #213445) | Cod sursa (job #1416920) | Cod sursa (job #1281369) | Cod sursa (job #2913751)
#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;
}