Pagini recente » Profil andrici_cezar | Cod sursa (job #2072040) | Istoria paginii home | Diferente pentru home intre reviziile 645 si 646 | Cod sursa (job #606918)
Cod sursa(job #606918)
#include <stdio.h>
#define lli long long int
int J[1000000+1];
int M[1000000+1];
int syt(int a, int b) {
if (a % b == 0) return b;
return syt(b, a % b);
}
int laske(int n) {
int t, s;
if (n == 1) return 1;
if (M[n]) return M[n];
if (J[n]) {
s = syt(J[n], n / J[n]);
t = laske(J[n]) * laske(n / J[n]) * s / laske(s);
} else {
t = n - 1;
}
M[n] = t;
return t;
}
int main(void) {
int i, j;
int n;
lli s;
FILE *tied;
for (i = 2; i <= 1000000; i++) {
if (J[i]) continue;
for (j = 2*i; j <= 1000000; j += i) {
J[j] = i;
}
}
tied = fopen("fractii.in", "r");
fscanf(tied, "%i", &n);
fclose(tied);
s = 1;
for (i = 2; i <= n; i++) {
s = s + laske(i) * 2;
}
tied = fopen("fractii.out", "w");
fprintf(tied, "%lli\n", s);
fclose(tied);
return 0;
}
// 6 = 1 2 5