Cod sursa(job #2488032)

Utilizator blackmanta45Andrei blackmanta45 Data 6 noiembrie 2019 00:09:03
Problema Fractii Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <string.h>
#define DIM 1000000
using namespace std;
ifstream fin ("fractii.in");
ofstream fout("fractii.out");
long long x,i,j,c,n,sol,k;
bool a[1000010];
int v[1000010],p[80000];
int main () {
    fin>>n;
    for(i=2;i<=1000000;i++)
        if(v[i]==0){
            p[++k]=i;
            for(j=i+i;j<=1000000;j+=i)
                v[j]=1;
        }
    for(i=1;i<=k;i++)
        for(j=p[i];j<=1000000;j*=p[i])
            v[j]=j/p[i]*(p[i]-1);
    for(i=2;i<=n;i++){
        x=i;
        if(v[i]==0)
            sol+=i-1;
        else if(v[i]>1)
            sol+=v[i];
        else if(i==2)
            sol++;
        else{
            for(j=1;j<=k && p[j]<=x;j++)
                if(x%p[j]==0)
                    x=x-x/p[j];

            sol+=x;
        }
    }
    fout<<sol*2+1;
}