Cod sursa(job #1502678)

Utilizator c0mradec0mrade c0mrade Data 14 octombrie 2015 21:54:50
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>
#define MAX 1000001
using namespace std;

    int n,i,j,ciur[MAX];
    long phi[MAX];


int main(){
    ifstream in("fractii.in");
    in>>n;
    in.close();
    long nr=1,nrp;
    i=2;
    while (i<=MAX){
        if (ciur[i]==0)
            for (j=2*i;j<=MAX;j+=i)
                if (ciur[j]==0)
                    ciur[j]=i;
        i++;
    }
    for (i=2;i<=n;i++)
        if (ciur[i]==0)
            {
            nr+=(i-1)*2;
            phi[i]=i-1;
            }
        else{
            if ((i/ciur[i])%ciur[i]==0)
                nrp=phi[i/ciur[i]]*ciur[i];
            else
                nrp=phi[i/ciur[i]]*(ciur[i]-1);
            nr+=2*nrp;
            phi[i]=nrp;
        }
    ofstream out("fractii.out");
    out<<nr;
    out.close();
    return 0;
}