Pagini recente » Cod sursa (job #1011799) | Cod sursa (job #2230120) | Cod sursa (job #2039210) | Cod sursa (job #1732093) | Cod sursa (job #203692)
Cod sursa(job #203692)
#include <stdio.h>
#define d5 15
#define d10 1000005
unsigned i, j, k, p, c, v;
unsigned care[d10][d5], paritate[d10];
unsigned long long cate[d10];
unsigned long long ans, N;
void read()
{
freopen("fractii.in","r", stdin);
scanf("%llu", &N);
}
void solve()
{
ans = N * (N-1) + 1;
for (i = 2; i <= 2; ++i)
for (j = i; j <= N; j += i)
care[j][++care[j][0]] = i;
for (i = 3; i <= N; i += 2)
if (care[i][0] == 0)
for (j = i; j <= N; j += i)
care[j][++care[j][0]] = i;
for (i = 2; i <= N; ++i)
for (j = 1; j < (1<<care[i][0]); ++j)
{
for (p = 1, c = 0, v = 1, k = j; v <= care[i][0] && k; k >>= 1, ++v)
if (k & 1)
{
p *= care[i][v];
c++;
}
paritate[p] = (c & 1);
++cate[p];
}
for (p = 2; p <= N; ++p)
if (cate[p])
{
if (paritate[p])
ans -= cate[p] * (cate[p]-1);
else
ans += cate[p] * (cate[p]-1);
}
}
void write()
{
freopen("fractii.out", "w", stdout);
printf("%llu\n", ans);
}
int main()
{
read();
solve();
write();
return 0;
}