Cod sursa(job #1791995)

Utilizator awdawdagfAndrei Palinteanu awdawdagf Data 29 octombrie 2016 22:07:45
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <ifstream>
#include <cmath>

using namespace std;

const int valoareMaxima=1000000;
int numerePrime[valoareMaxima+1], k, n;
bool esteVizitat[valoareMaxima+1];

int putere(int x, int y)
{
    int p=0;
    while(x%y==0)
    {
        x/=y;
        p++;
    }
    return p;
}

int indicatorulLuiEuler(int x)
{
    int p=1;
    if(!esteVizitat[x])
        return x-1;
    else
    {
        for(int i=1; i<=k; i++)
        {
            if(numerePrime[i]>x)
                break;
            else if(putere(x, numerePrime[i])!=0)
                p*=(numerePrime[i]-1)*pow(numerePrime[i], putere(x, numerePrime[i])-1);
        }
    }
    return p;
}

int main()
{
    esteVizitat[1]=1;
    ifstream fin("fractii.in");
    cin>>n;
    for(int i=2; i<=n; i++)
    {
        if(!esteVizitat[i])
        {
            numerePrime[++k]=i;
            for(int j=i+i; j<=n; j+=i)
                esteVizitat[j]=true;
        }
    }
    int solutie=0;
    for(int i=1; i<=n; i++)
        solutie+=indicatorulLuiEuler(i);
    ofstream fout("fractii.out");
    fout<<solutie*2-1;
    return 0;
}