Cod sursa(job #1011189)

Utilizator hevelebalazshevele balazs hevelebalazs Data 16 octombrie 2013 15:08:01
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>
#include <math.h>
#define N 1000001
#define ll long long
#define fr(i,a,b) for(int i=a;i<b;++i)
int a[N];
int main(){
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    int n;
    scanf("%i",&n);
    int sqrtn=sqrt(n);
    a[1]=1;
    fr(i,2,sqrtn+1){
        if(!a[i]) for(int j=i;j<=n;j+=i) a[j]=i;
        }
    fr(i,2,n+1){
        if(a[i]==i||!a[i]) a[i]=i-1;
        else{
            int p=a[i];
            if((i/p)%p==0) a[i]=a[i/p]*p;
            else a[i]=a[i/p]*(p-1);
            }
        }
    ll s=0;
    fr(i,1,n+1) s+=a[i];
    s=s<<1;
    s-=1;
    printf("%lli\n",s);
    return 0;
    }