Pagini recente » Cod sursa (job #744016) | Cod sursa (job #105313) | Cod sursa (job #496858) | Cod sursa (job #822804) | Cod sursa (job #1993)
Cod sursa(job #1993)
#include <stdio.h>
const char *fin = "fractii.in";
const char *fout = "fractii.out";
int vec[1000010];
int prims[100000];
int primcount = 0;
int n = 0;
int divs(int c) {
if (vec[c] == 0) {
prims[primcount++] = c;
if (primcount == 100000) printf("Hatz");
for(int i = 2; i * c <= n; ++i) {
vec[i * c] += i - 1;
}
vec[c] = c - 1;
return c - 1;
}
int l = c, r = 1;
for (int i = 0; (i < primcount) && (l > prims[i]); ++i) {
while (l % (prims[i] * prims[i]) == 0) {
r *= prims[i];
l /= prims[i];
}
}
if (r == 1) {
vec[c] = c - 1 - vec[c];
return vec[c];
}
vec[c] = r * vec[l];
return vec[c];
}
int main(){
FILE *f = fopen(fin, "rt");
fscanf(f, "%d", &n);
fclose(f);
int r = 0;
for (int i = 2; i <= n; ++i) {
int d = divs(i);
//printf("%d ", d);
r += d;
}
f = fopen(fout, "wt");
fprintf(f, "%d", (r << 1) + 1);
fclose(f);
return 0;
}