Pagini recente » Cod sursa (job #3318009) | Cod sursa (job #2307817) | Cod sursa (job #1105493) | Cod sursa (job #3317311) | Cod sursa (job #1104521)
#include <stdio.h>
bool flag;
int primes[1000000];
int isPrime(int x) {
for (int d = 1; primes[d] * primes[d] <= x; ++d)
if (x % primes[d] == 0)
return 0;
return 1;
}
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;
primes[++primes[0]] = 2;
for (int i = 3; i <= n; i += 2)
if (isPrime(i))
primes[++primes[0]] = i;
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;
}