Pagini recente » Cod sursa (job #59949) | Cod sursa (job #2935097) | Cod sursa (job #1028690) | Cod sursa (job #2389323) | Cod sursa (job #52632)
Cod sursa(job #52632)
#include <stdio.h>
#include <math.h>
#include <time.h>
#define NMAX 10101
#define NPRIMES 78500
long tot[NMAX], notprime[NMAX];
long np, prime[NPRIMES];
long n;
long sum = 1;
void searchp() {
long i, d, power, f;
for (i = 2; i < NMAX; ++i) {
if (!notprime[i]) {
tot[i] = f = i-1;
for (d = 2; i * d < NMAX; ++d)
notprime[i*d] = 1;
for (power = i*i; power < NMAX; power *= i) {
f *= i;
tot[power] = f;
}
}
}
}
void phi(long n) {
long i, rad = sqrt(n);
long tmp = n;
double f = n;
for (i = 0; prime[i] < rad; ++i)
if (!(n % prime[i]))
if ((n/prime[i]) % prime[i] == 0)
tot[n] = prime[i] * tot[n/prime[i]];
if (!tot[n]) {
for (i = 0; prime[i] < tmp; ++i)
if (!(n % prime[i]))
f *= 1 - 1./prime[i];
tot[n] = (long)f;
}
}
int main() {
clock_t end;
long i;
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-100; ++i)
if (!tot[i])
phi(i);
for (i = 2; i <= n; ++i)
sum += 2 * tot[i];
//phi(10);
end = clock();
printf("%ld\n", sum);
return 0;
}