Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #3116181) | Cod sursa (job #3357474) | Monitorul de evaluare | Cod sursa (job #1104529)
#include <stdio.h>
bool flag;
int c[1000100], primes[1000100];
int ciur(int x) {
for (int i = 2; i * i <= x; ++i)
if (c[i] == 0)
for (int j = i + i; j <= x; j += i)
c[j] = 1;
for (int i = 2; i <= x; ++i)
if (!c[i])
primes[++primes[0]] = i;
}
int desc(int x) {
int res = 0;
flag = 1;
for (int i = 1; primes[i] * primes[i] <= x; ++i) {
int pw = 0, d = primes[i];
while (x % d == 0) {
x /= d;
++pw;
}
if (pw > 1) {
flag = 0;
return 0;
}
res += pw;
}
if (x > 1)
++res;
return res;
}
int main() {
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
int n;
scanf("%d", &n);
long long tot = 1LL * n * n;
ciur(n);
for (int i = 2; i <= n; ++i)
if (desc(i) % 2 && flag)
tot -= 1LL * (n / i) * (n / i);
else if (flag)
tot += 1LL * (n / i) * (n / i);
printf("%lld", tot);
return 0;
}