Cod sursa(job #1576793)

Utilizator Kzsolty96SAPIENTIA OSZTIAN DANIEL KUCSVAN Kzsolty96 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;
}