Pagini recente » Cod sursa (job #1874003) | Cod sursa (job #2035552) | Cod sursa (job #2294056) | Cod sursa (job #2325080) | Cod sursa (job #3265944)
/*
TEorema fundamentala a aritmeticii:
5= 5^1
9 = 3^2
100 = 2^2*5^2: 2,5 factori primi
N = 12
12 = 2^2 * 3;
10 = 2 * 5
n il descompui in factori primi
PHI(n) = n (1-1/p1)(1-1/p2)....
p este prim | n
PHI(12) = 12 (1-1/2)*(1 - 1/3); 4: 1,5,7,11
PHI(10) = 10 (1-1/2)*(1 - 1/5)
daca numarul este prim: 17
regula este n-1 coprimes
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
PHI(N)
fractii
N = 4
1/1 1/2 1/3 1/4 2/1 2/3 3/1 3/2 3/4 4/1 4/3
avem 11 fractii
phi(1) phi(2) + phi(3) + phi(4) = suma
suma * 2
5 + 5 + 1
*/
#include <stdio.h>
#define FIN "fractii.in"
#define FOUT "fractii.out"
void computePHI(long long int n, long long int *ptr) {
long long phi[ n + 1 ];
long long sum = 0;
//phi[1] = 1
//phi[2] = 2
//phi[3] = 3
//phi[4] = 4
for(int i = 1; i <= n; ++i) phi[i] = i;
for(int i = 2; i <= n; ++i) {
//daca este numar prim
if(phi[i] == i) {
for(int j = i; j <= n; j += i) {
//euler's totient = indictorul lui Euler
phi[ j ] = phi[ j ] / i * (i - 1 );
}
}
sum += phi[i];
}
*ptr = ( sum<<1 ) + 1;
}
int main(int argc, char const *argv[]) {
long long n, ans;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%lld",&n);
computePHI(n,&ans);
printf("%lld",ans);
return 0;
}