Cod sursa(job #1952120)

Utilizator mateibanuBanu Matei Costin mateibanu Data 3 aprilie 2017 22:45:59
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>

using namespace std;

FILE*f=fopen("fractii.in","r");
FILE*g=fopen("fractii.out","w");

int n,v[1000010],t[1000010],s,p,i,j,e,x,y;

void ciur(){
    v[1]=1;
    int d,i;
    for (d=2;d*d<=n;d++)
        if (!v[d]) for (i=2;i*d<=n;i++) v[d*i]=1;
}

int main()
{
    fscanf(f,"%d",&n);
    ciur();
    t[1]=1;
    s=1;
    for (i=2;i<=n;i++){
        if (!v[i]) t[i]=i-1;
        else{
            for (j=2;j*j<=i;j++)
                if  (i%j==0) {p=j;break;}
            e=0;x=i;y=1;
            while (x%p==0){
                x/=p;
                e++;
                y*=p;
            }
            y/=p;
            t[i]=(p-1)*y*t[x];
        }
        s+=t[i]*2;
    }
    fprintf(g,"%d",s);
    fclose(f);
    fclose(g);
    return 0;
}