Cod sursa(job #39121)

Utilizator razvi9Jurca Razvan razvi9 Data 26 martie 2007 13:55:40
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
#include<string.h>
#include<math.h>
int n,i,j,k,t[1000001];
long long nr;
char prim[1000001];
int tot(int n)
{int nr=n;
 if(prim[n]) return n-1;
 if(sqrt(n)==(int)sqrt(n)) {nr=n;n=sqrt(n);}
 for(int i=2;i<=n;i++)
  if(prim[i]&&n%i==0) {nr=nr-nr/i;n=n/i; }
 return nr;}
int main()
{freopen("fractii.in","r",stdin);
 freopen("fractii.out","w",stdout);
 scanf("%d",&n);
 nr=1;
 memset(prim,1,n+1);
 for(i=2;i<=n;i++)
  if(prim[i])
  for(j=2*i;j<=n;j=j+i)
   prim[j]=0;
 nr=1;
 t[1]=1;
 for(i=2;i<=n;i++)
 {if(prim[i]) t[i]=i-1;
  else{
  for(j=2;!prim[j]||i%j;j++);
  k=1;while((i/(k*j))%j==0) k=k*j;
  t[i]=t[i/(k*j)]*(j-1)*k;}
  nr=nr+2*t[i];}
 printf("%lld",nr);
 fclose(stdout);
 return 0;}