Cod sursa(job #427700)

Utilizator gabipurcaruGabi Purcaru gabipurcaru Data 28 martie 2010 12:50:21
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
using namespace std;

ifstream in("fractii.in");
ofstream out("fractii.out");

int n,s,i,prime[100010],p,j;
bool ciur[100010];

int pow(int n, int k)
{
    int ret;
    if(k==0)
        return 1;
    else if(k%2==0)
    {
        ret = pow(n,k/2);
        return ret*ret;
    }
    ret = pow(n,(k-1)/2);
    return n*ret*ret;
}

int phi(int k)
{
    if(k==1)
        return 1;
    int ret=1,div, nr;
    for(div=1; div<=p && prime[div]<=k; div++)
    {
        nr = 0;
        while(k%prime[div] == 0)
            {nr++;k/=prime[div];}
        if(nr)
            ret*=(prime[div]-1)*pow(prime[div],nr-1);
    }
    return ret;
}

int main()
{
    in>>n;
    for(i=2; i<=n; i++)
        if(!ciur[i])
        {
            prime[++p] = i;
            for(j=2*i; j<=n; j+=i)
                ciur[j] = 1;
        }
    for(i=1; i<=n; i++)
        s+=2*phi(i);
    out<<s-1;
    return 0;
}