Pagini recente » Cod sursa (job #2190380) | Cod sursa (job #2176557) | Cod sursa (job #3245867) | Cod sursa (job #2102365) | Cod sursa (job #230486)
Cod sursa(job #230486)
#include <stdio.h>
#include <math.h>
FILE *fi = fopen("fractii.in", "r");
FILE *fo = fopen("fractii.out", "w");
char V[1000000];
unsigned long long int NS = 1;
long N;
void genPrime() {
for (int i=3; i<=1000000; i+=2)
if (V[i] == 0)
for (int j=i+i+i; j<=1000000; j+=2*i)
V[j] = 1;
}
unsigned long long int totient(long X) {
long D=2, k=0;
unsigned long long int NF = 0;
if (X==1) return 1;
if (X%2 && V[X] == 0) return X-1;
while (X%D) D++;
while (X%D == 0) { X/=D;k++; }
NF += (long)(int)pow((double)D, (double)k-1)*(D-1)* totient(X);
return NF;
}
int main() {
fscanf(fi, "%ld", &N);
genPrime();
for (long i=2; i<=N; i++) {
NS+=totient(i)*2;
}
fprintf(fo, "%llu\n", NS);
fclose(fi);
fclose(fo);
return 0;
}