Pagini recente » Cod sursa (job #49631) | Cod sursa (job #160806) | Cod sursa (job #1301550) | Cod sursa (job #2486928) | Cod sursa (job #195829)
Cod sursa(job #195829)
#include <stdio.h>
#define MAX 1000000
int cache[MAX]; /* Coprime caching */
/* Return the number of coprime numbers < n. */
int coprimes(int n) {
int result = 1, d = 2, found = 0;
while (n > 1 && !found) {
int factor = 1;
while (n % d == 0) {
factor *= d;
n /= d;
}
if (factor > 1) {
result *= factor - factor / d;
result *= cache[n];
found = 1;
}
if (d != 2)
d += 2;
else
d = 3;
}
return result;
}
/* Generate coprimes for each number <= n */
void gen_coprimes(int n) {
int i;
cache[1] = 1;
cache[2] = 1;
cache[3] = 2;
for (i = 4; i <= n; i++)
cache[i] = coprimes(i);
}
int main(void) {
FILE *fin, *fout;
int n, i;
long long result = 0;
fin = fopen("fractii.in", "rt");
fscanf(fin, "%d\n", &n);
fclose(fin);
gen_coprimes(n);
result = 1;
for (i = 2; i <= n; i++) {
result += 2 * cache[i];
}
fout = fopen("fractii.out", "wt");
fprintf(fout, "%lld\n", result);
fclose(fout);
return 0;
}