Cod sursa(job #1415832)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 6 aprilie 2015 17:09:14
Problema Fractii Scor 70
Compilator c Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <stdlib.h>
char ciur[1000001];
int pr[1000001];
int main()
{
    long long n,nr,i,q,div,e,exp,put,j,z;
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    scanf("%lld",&n);
    for(i=2; i*i<=n; i++)
        if(ciur[i]==0){
            for(j=i*i; j<=n; j+=i)
                ciur[j]=1;
        }
    z=0;
    for(i=2; i<=n; i++)
        if(ciur[i]==0)
            pr[++z]=i;
    nr=1;
    for(i=1; i<=n; i++)
    {
        q=i;
        div=1;
        e=1;
        while(pr[div]*pr[div]<=q)
        {
            exp=0;
            put=1;
            while(q%pr[div]==0)
                exp++,q/=pr[div],put*=pr[div];
            if(exp>0)
                e*=(pr[div]-1)*put/pr[div];
            div++;
        }
        if(q>1)
            e*=(q-1);
        if(i==1)
            e--;
        nr+=(2*e);
    }
    printf("%lld\n",nr);

    return 0;
}