Cod sursa(job #2198784)

Utilizator MateiBarbaBarba Matei MateiBarba Data 25 aprilie 2018 14:20:29
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>

using namespace std;

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

short int ciur[1000001];
int n;
long long int fractii = 1;
int p = 1, phi = 1, d = 2;

int main()
{
    f >> n;
    //2 = numar neprim
    //1 = numar prim

    ciur[1] = 2;
    ciur[2] = 1;
    for(int i = 3 ; i <= n ; i += 2)
    {
        if(ciur[i] == 0)
        {
            ciur[i] = 1;
        }
        else{
            for(int j = i+i ; j <= n ; j += i)
            {
                ciur[j] = 2;
            }
        }
    }

    for(int i = 2 ; i <= n ; i++)
    {
        d = 2;
        int ci = i;
        if(ciur[i] == 1)
        {
            fractii += 2*(i-1);
        }
        else{
            while(ci / d >= 1){
                if(ci % d == 0){
                    while(ci % d == 0){
                        ci /= d;
                        p *= d;
                    }
                    p /= d;
                    phi *= (d-1)*p;
                    p = 1;
                }
                if(d == 2) d++;
                else d+= 2;
            }
            fractii += 2*phi;
            phi = 1;
        }

    }

    g << fractii;


    return 0;
}