Cod sursa(job #328842)

Utilizator points_hunterAdrian Dobrescu points_hunter Data 3 iulie 2009 14:48:41
Problema Fractii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
int v[1000001];

int main(){
    int n;
    long long i,rez,x,y,nr,p;
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    scanf("%d",&n);
    for (i=2;i<=n/2;i++)
        if(!v[i]){
          p=i;
          while(p<n){
               p=p+i;
               if(p<=n)
               v[p]=i;
               }
          }
    nr=0;
    for(i=2;i<=n;i++)
       if(!v[i])
         nr+=i-1;
       else{
            x=i;
            rez=i;
            while(v[x]){
                y=v[x];
                rez=rez/v[x]*(v[x]-1);
                while(y==v[x])
                   x=x/v[x];
                if(x==y)
                  x=1;
                else
                   if(!v[x])
                     rez=rez/x*(x-1);
               }
             nr+=rez;
            }
    printf("%lld",2*nr+1);
    return 0;
}