Cod sursa(job #149322)

Utilizator Mishu91Andrei Misarca Mishu91 Data 5 martie 2008 16:23:54
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<stdio.h>
#define Nmax 500003


FILE *fin=freopen("fractii.in","r",stdin),
     *fout=freopen("fractii.out","w",stdout); 

char viz[Nmax];

long prim[80000],nrp,n;

void ciur()
{
  for(int i=2;i<=Nmax;i++)
    if(!viz[i])
    {
      prim[++nrp]=i;
      for(int j=i+i;j<=Nmax;j+=i)
        viz[j]=1;
    }
}

long long tot(int k)
{
  long long nr=k, nm=1; 
  if(viz[k]==0) return k-1;
  for(int i=1;prim[i]*2<=k;i++)
    if(k%prim[i]==0)
    {
      nr*=(prim[i]-1);
      nm*=prim[i];
    }
  return nr/nm;
}

int main()
{
  ciur();
  long long s=0;
  scanf("%d",&n);
  for(int i=2;i<=n;i++)
    s+=tot(i);
  printf("%lld",2*s+1);
  return 0;
}