Cod sursa(job #1415828)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 6 aprilie 2015 16:45:18
Problema Fractii Scor 60
Compilator c Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#include <stdlib.h>
long long put(long long n,long long p)
{
    if(p==0) return 1;
    if(p==1) return n;
    if(p%2==0) return(put(n*n,p/2));
    if(p%2==1) return(n*put(n*n,p/2));
}
int main()
{
    long long n,nr,i,q,div,e,exp;
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    scanf("%lld",&n);
    nr=1;
    for(i=1; i<=n; i++)
    {
        q=i;
        div=2;
        e=1;
        while(div*div<=q)
        {
            exp=0;
            while(q%div==0)
                exp++,q/=div;
            if(exp>0)
                e*=(div-1)*put(div,exp-1);
            div++;
        }
        if(q>1)
            e*=(q-1);
        if(i==1)
            e--;
        nr+=(2*e);
    }
    printf("%lld\n",nr);

    return 0;
}