Cod sursa(job #54002)

Utilizator vicenzo_cnuStan Alexandru Dan vicenzo_cnu Data 23 aprilie 2007 21:30:57
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#define MAXN 100005
#define MAXP 1000005
long n,q,nr=1;
long long a[MAXN],p[MAXP],b[MAXP],s;
FILE *f,*g;

void prim()
{int i, j;
  for (i = 1; ((i * i) << 1) + (i << 1) <= n; i += 1) {
    if ((p[i >> 3] & (1 << (i & 7))) == 0) {
      for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j += (i << 1) + 1) {
	p[j >> 3] |= (1 << (j & 7));
      }
    }
  }
  nr=1;
  for (i = 1; a[nr]<=n; ++i)
       if ((p[i >> 3] & (1 << (i & 7))) == 0)
	   {nr++;
	   a[nr]=2*i+1;
       b[a[nr]]=a[nr]-1;}
 }


int main()
{long i,j;
f=fopen("fractii.in","r");
g=fopen("fractii.out","w");
fscanf(f,"%ld",&n);
a[1]=2;b[2]=1;
prim();
for(i=2;i<=n;i++)
{if(b[i]==0)
{b[i]=i;
for(j=1;j<=nr&&a[j]<=n;j++)
if(i%a[j]==0)
{b[i]/=a[j];
b[i]*=a[j]-1;}}
s+=b[i];}

fprintf(g,"%lld\n",2*s+1);
fclose(f);
fclose(g);
return 0;}