Cod sursa(job #1075275)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 8 ianuarie 2014 19:58:27
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
#include <bitset>

#define DN 1000005
using namespace std;

int fi[DN],div[DN],n,s;
bitset<DN> prim;

void ciur()
{
    for(int i=2;i<=n;++i){
        if(!prim[i]){
            for(int j=i+i;j<=n;j+=i)
                prim[j]=1,div[j]=i;
        }
    }
}

int main()
{
    ifstream f("fractii.in");
    ofstream g("fractii.out");
    f>>n;
    ciur();
    fi[1]=1;
    for(int i=2;i<=n;++i){

        int x = i;
        if(prim[ x ]==0) /// daca e prim
            fi[x]=x-1;
        else{

            int rez = 0 , pw = 1 ;
            while(x%div[i]==0)
                x/=div[i];

            if(x == 1) /// de forma fi ( x ^ p )
            {
                int b = div[i] , incape = i/div[i];
                fi[i] =  ( b - 1 ) * incape;
            }
            else /// de forma fi ( a * b ) , unde gcd(a,b) = 1
                fi[ i ] = fi[ x ] * fi[ i/x ];
        }
        s+=2*fi[i];
    }
    g<<++s;
    return 0;
}