Cod sursa(job #1324622)

Utilizator mirunazMiruna Zavelca mirunaz Data 22 ianuarie 2015 16:30:07
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<cstdio>
using namespace std;
int n,d,x,i,j,v[1000001],f;
char ciur[1000001];
long long c=0;
int main ()
{
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    scanf("%d",&n);
    for(i=2;i*2<=n;i++)
        ciur[i*2]='1';
    v[1]=2;
    v[2]=3;
    i=3;
    d=2;
    while(i<n)
    {
        for(j=i;(long long)j*i<=n;j+=2)
            ciur[i*j]='1';
        i+=2;
        while(ciur[i]=='1')
            i+=2;
        d++;
        v[d]=i;
    }
    for(i=1;i<=n;i++)
    {
        x=i;
        f=i;
        for(j=1;j<=d && v[j]<=x;j++)
        {
            if(x%v[j]==0)
            {
                f/=v[j];
                f=f*(v[j]-1);
            }
            while(x%v[j]==0)
                x/=v[j];
        }
        c+=f;
    }
    c*=2;
    c--;
    printf("%d",c);
    return 0;
}