Cod sursa(job #1554879)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 21 decembrie 2015 21:22:48
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>

using namespace std;
struct alfa
{
    int a,b;
};
alfa v[1000005];
int i,j,n;
unsigned long long s;
int main()
{
    ifstream f("fractii.in");
    ofstream g("fractii.out");
    for(i=2; i<=1000000; i++)
    {
        v[i].a=i;
        v[i].b=i-1;
    }
    i=2;
    v[1].a=1;
    v[1].b=1;
    for(i=4; i<=1000000; i+=2)
    {
        v[i].b++;
        while(v[i].a%2==0)
            v[i].a/=2;
        v[i].b/=2;
        if(v[i].a>1)
        {
            v[i].b/=v[i].a;
            v[i].b*=(v[i].a-1);
        }
    }
    i=3;
    v[3].b=2;
    while(i*i<1000000)
    {
        for(j=i*2; j<=1000000; j+=i)
        {
            v[j].b*=v[j].a;
            v[j].b/=(v[j].a-1);
            v[j].b/=i;
            v[j].b*=(i-1);
            while(v[j].a%i==0)
                v[j].a/=i;
            if(v[j].a>1)
            {
                v[j].b/=v[j].a;
                v[j].b*=(v[j].a-1);
            }
        }
        while(v[i].a!=i-1&&i<=1000)
            i+=2;
    }
    f>>n;
    for(i=2; i<=n; i++)
    {
        s+=v[i].b*2;
    }
    g<<s+1<<'\n';
    f.close(); g.close();
}