Cod sursa(job #178002)

Utilizator firewizardLucian Dobre firewizard Data 13 aprilie 2008 23:20:02
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
char v[2000002]; 
long long n,i,j,p[1000000],pr[1000000],f,s[1000000];
int main()   
{        
freopen("fractii.in","r",stdin);      
freopen("fractii.out","w",stdout);      
     
scanf("%lld",&n);      

for(i=3;i<=1000000;i++)p[i]=i;
     
for(i=3;i<=1000000;i=i+2)      
   if(!v[i]) {           
    for(j=3*i;j<=1000000;j=j+2*i)  v[j]=1;       
   }  
   
 p[1]=1;
 p[2]=1;
 pr[2]=1;
for(i=3;i<=1000000;i=i+2)
if(!v[i]){p[i]=i-1;pr[i]=1;}

for (i=3;i<=n;i++)
{
    if (p[i]==i){
       for (j=2;j<=i/2+1;j++)
           if (pr[j]==1)
              if (i%j==0)
                 p[i]=p[i]*(j-1)/j;              
    }
}
for(i=1;i<=n;i++)
s[i]+=p[i]+s[i-1];
printf("%lld\n",2*s[n]-1);
return 0;  
}