Pagini recente » Rating Bercea Monica (monica_diana) | Cod sursa (job #401478) | Cod sursa (job #401499) | Cod sursa (job #798511) | Cod sursa (job #203688)
Cod sursa(job #203688)
#include <stdio.h>
#define d5 10
#define d10 1000005
int N, i, j, k, p, c, v;
int care[d10][d5], paritate[d10], cate[d10];
long long ans;
void read()
{
freopen("fractii.in","r", stdin);
scanf("%d", &N);
}
void solve()
{
ans = N * N - N + 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("%lld\n", ans);
}
int main()
{
read();
solve();
write();
return 0;
}