Cod sursa(job #2603435)

Utilizator CamelcamelCamel Camel Camelcamel Data 19 aprilie 2020 20:14:33
Problema Fractii Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

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

long long v[1000001],p[78499],G[9],g[9],t=1,n,gmax,stot=0,floc,y;

void Gwrite(int x){
    int mm=1;
    for(int i=1;i<=x;i++){
        if(p[i]==0||p[i]>x)break;
        if(x%p[i]==0){G[mm]=p[i];mm++;}
    }
    gmax=mm-1;
}
void gplus(){
    for(int i=1;i<=gmax;i++){
        if(g[i]==1){g[i]=0;}
        else{g[i]=1;break;}
    }
}
void clean(){
    for(int i=0;i<=8;i++) G[i]=g[i]=0;
}

int main()
{
    in>>n;
    v[0]=v[1]=-1;
    for(int i=2;i<=n;i++) if(v[i]==0) for(int j=2;i*j<=n;j++) v[i*j]=1;
    for(int i=2;i<=n;i++) if(v[i]==0){p[t]=i;t++;}
    for(int i=2;i<=n;i++){
        floc=1;
        y=i;
        Gwrite(i);
            for(int k=1;k<=gmax;k++){
                floc*=G[k]-1;
                y/=G[k];
            }

       stot+=y*floc;
       clean();
    }
    out<<stot*2+1;
}