Pagini recente » Cod sursa (job #2630879) | Cod sursa (job #1385990) | Cod sursa (job #184412) | Cod sursa (job #441076) | Cod sursa (job #191525)
Cod sursa(job #191525)
#include <stdio.h>
int n;
int primes[1000000];
int numPrimes;
int relativelyPrime(int n) {
int origN = n;
numPrimes = 0;
int i = 2;
while (n > 1 && i*i <= n) {
if (n % i == 0) {
primes[numPrimes++] = i;
do {
n /= i;
} while (n % i == 0);
}
i++;
}
if (n > 1) {
primes[numPrimes++] = n;
}
//printf("%d: ", origN);
// for (int k = 0; k < numPrimes; k++) {
// printf("%d ", primes[k]);
// }
int multiplier = origN;
int result = 1;
for (int k = 0; k < numPrimes; k++) {
multiplier /= primes[k];
result *= primes[k] - 1;
}
// printf("| multiplier: %d result: %d", multiplier, result * multiplier);
//printf("\n");
return result * multiplier;
}
int main(void) {
FILE* f = fopen("fractii.in", "rt");
fscanf(f, "%d", &n);
fclose(f);
long long result = 1;
for (int i = 2; i <= n; i++) {
result += 2 * (long long) relativelyPrime(i);
}
f = fopen("fractii.out", "wt");
fprintf(f, "%lld\n", result);
fclose(f);
return 0;
}