Cod sursa(job #1160367)

Utilizator raduraraduIacob Radu raduraradu Data 30 martie 2014 14:56:41
Problema Fractii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
bool ciur[1000001];
long long prim[200001];
int main()
{
    long long  i,k=0,r,phi,nr,n,j;
    f>>n;
    for(i=2;i<=n;i++)
        ciur[i]=1;
    for(i=2;i<=n;i++)
        if(ciur[i])
        for(j=2;i*j<=n;j++)
        ciur[i*j]=0;
    for(i=2;i<=n;i++)
        if(ciur[i])
    {
        k++;
        prim[k]=i;
    }
    r=1;
    for(i=2;i<=n;i++)
    {
        phi=i;
        nr=i;
        for(j=1;prim[j]<=sqrt(nr)&&j<=k;j++)
            if(nr%prim[j]==0)
        {
            phi=(phi*(prim[j]-1))/prim[j];
            while(nr%prim[j]==0)
                nr/=prim[j];
        }
        if(nr>1)
            phi=(phi*(nr-1))/nr;
        r=r+2*phi;
    }
    g<<r;
    return 0;
}