Pagini recente » Cod sursa (job #2084779) | Cod sursa (job #1859635) | Cod sursa (job #1662450) | Cod sursa (job #2843477) | Cod sursa (job #2228532)
#include <cstdio>
using namespace std;
const int NMAX = 1000000;
int n, m, min,
nrP = 1, sE,
p[NMAX+1];
char b[NMAX+1];
long long cnt;
void bt(int v, int pr) {
if(sE % 2 == 1) cnt -= (long long)(n/v) * (m/v);
else cnt += (long long)(n/v) * (m/v);
for(int i = pr; i <= nrP; i++) {
int x = v * p[i];
if(x < min) {
sE++;
bt(x, i+1);
sE--;
}
}
}
void ciur(int x) {
for(int i = 4; i <= x; i += 2)
b[i] = 1;
for(int i = 3; i * i <= x; i += 2)
if(b[i] == 0)
for(int j = i*i; j <= x; j += i)
b[i] = 1;
p[1] = 2;
for(int i = 3; i <= x; i += 2)
if(b[i] == 0) p[++nrP] = i;
}
int main()
{
freopen("mins.in", "r", stdin);
freopen("mins.out", "w", stdout);
scanf("%i %i", &n, &m);
n--, m--;
min = (m > n) ? n : m;
ciur(min);
bt(1, 1);
printf("%lld", cnt);
return 0;
}