Pagini recente » Cod sursa (job #575023) | Cod sursa (job #2613065) | Cod sursa (job #2879900) | Cod sursa (job #952730) | Cod sursa (job #230452)
Cod sursa(job #230452)
#include <stdio.h>
FILE *fi = fopen("fractii.in", "r");
FILE *fo = fopen("fractii.out", "w");
unsigned long long int NF = 1;
long N;
long putere(long x, long y) {
long p = 1;
if (y==0) return 1;
for (int i=1; i<=y; i++) p*=x;
return p;
}
int prim(long X) {
long D=3;
if (X%2 == 0) return 0;
while (D*D<=X) {
if (X%D == 0) return 0;
D+=2;
}
return 1;
}
unsigned long long int totient(long X) {
long D=3, k=0;
unsigned long long int NF = 0;
if (X==1) return 1;
if (X%2 == 0) {
while (X%2 == 0) { X/=D; k++; }
NF+=putere(2, k-1);
}
while (X>1) {
k = 0;
while (X%D == 0) { X/=D; k++; }
NF+=putere(D, k-1)*(D-1);
D+=2;
}
return NF;
}
int main() {
fscanf(fi, "%ld", &N);
for (long i=2; i<=N; i++) {
NF+=totient(i)*2;
}
fprintf(fo, "%llu\n", NF);
fclose(fi);
fclose(fo);
return 0;
}