Pagini recente » Cod sursa (job #2598360) | Cod sursa (job #1056035) | Cod sursa (job #2964030) | Cod sursa (job #2373451) | Cod sursa (job #52700)
Cod sursa(job #52700)
#include <stdio.h>
#include <math.h>
#include <time.h>
#define NMAX 1000001
#define NPRIMES 78500
int tot[NMAX], notprime[NMAX];
int np, prime[NPRIMES];
int n;
long long sum = 1;
void searchp() {
long i, d;
for (i = 2; i < NMAX; ++i) {
if (!notprime[i]) {
tot[i] = i-1;
for (d = 2; i * d < NMAX; ++d)
notprime[i*d] = 1;
}
}
}
int main() {
clock_t end;
int i, j, rad;
FILE * fi = freopen("fractii.in", "r", stdin);
FILE * fo = freopen("fractii.out", "w", stdout);
scanf("%ld", &n);
searchp();
for (i = 2; i < NMAX; ++i)
if (!notprime[i])
prime[np++] = i;
/*for (i = 0; i < NPRIMES; ++i)
if (prime[i])
printf("%ld ", prime[i]);
*/
for (i = 2; i < NMAX; ++i)
if (!tot[i])
for (j = 0, rad = sqrt(i); prime[j] < i; ++j)
if (!(i % prime[j])) {
if ((i/prime[j]) % prime[j] == 0)
tot[i] = prime[j] * tot[i/prime[j]];
else
tot[i] = (prime[j]-1) * tot[i/prime[j]];
break;
}
for (i = 2; i <= n; ++i)
// printf("%d %d\n", i, tot[i]);
sum += 2 * tot[i];
//phi(10);
end = clock();
printf("%lld\n", sum);
return 0;
}