Pagini recente » Cod sursa (job #3042195) | Cod sursa (job #481985) | Cod sursa (job #2038242) | Cod sursa (job #3252396) | Cod sursa (job #3246119)
#include <fstream>
#include <vector>
#include <bitset>
#define int long long
#define lgi (int) lgv[i]
#define lgj (int) lgv[j]
using namespace std;
ifstream in("mins.in");
ofstream out("mins.out");
int mask, j, k, i, n, m, s, lg, best;
int v1[] = {-1, 1};
void fact(int x);
char lgv[1000010];
int32_t ciur[1000010][7];
int32_t main()
{
in >> n >> m;
i = 2;
n--;
m--;
if (n > m)
swap(n, m);
ciur[i][lgi] = i;
lgi++;
for (j = i*2; j <= n; j+=i)
{
ciur[j][lgj] = i;
lgj++;
}
for (i = 3; i <= n; i += 2)
if (lgi == 0)
{
ciur[i][lgi] = i;
lgi++;
for (j = i*2; j <= n; j+=i)
{
ciur[j][lgj] = i;
lgj++;
}
}
for (i = 1; i <= n; i++)
{
s=0;
lg=lgi;
for (mask = 1; mask < (1<<lg); mask++)
{
int nr = 0, p = 1;
for (j = 0; j < lg; j++)
if ((mask&(1<<(j))))
{
nr++;
p*=1ll*ciur[i][j];
}
s += m/p*v1[nr%2];
}
best += m-s;
}
out << best;
return 0;
}