Mai intai trebuie sa te autentifici.
Cod sursa(job #1576793)
Utilizator | Data | 22 ianuarie 2016 20:47:05 | |
---|---|---|---|
Problema | Fractii | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.95 kb |
#include <stdio.h>
#include <math.h>
bool prim(int);
bool prim_pow(int, int);
int rel_prim(int);
int main(){
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
long long n, m, a, i;
scanf("%lli",&n);
a = 1;
for(i = 1; i < n; ++i){
a += 2 * rel_prim(i + 1);
}
printf("%lli", a);
return 0;
}
int rel_prim(int n){
if(prim(n))
return n - 1;
int i = 2;
while(n % i)
++i;
if(prim_pow(n, i))
return n - n / i;
else
return rel_prim(i)*rel_prim(n/i);
}
bool prim(int n){
if(n == 2)
return true;
if(n % 2 == 0){
return false;
}
int i, sq = sqrt(n);
for(i = 3; i <= sq; i += 2){
if(n % i == 0)
return false;
}
return true;
}
bool prim_pow(int n, int i){
while(n % i == 0)
n /= i;
if(n == 1)
return true;
return false;
}