Cod sursa(job #80195)

Utilizator alex23alexandru andronache alex23 Data 26 august 2007 20:28:26
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>


int a[1000001],n,nr,p[1000001],i,j,k,x,suma,s,r,q;

void prim(int n)

 {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));
                            }
               }
       }
  }


int main()
{FILE *fin,*fout;

 fin=fopen("fractii.in","r");
 fscanf(fin,"%d",&n);
 fclose(fin);
 prim(n);
 nr=n;
 if (n>1) nr=nr+n-n/2;
 for (i=3;i<=n;i++)
    {x=(i-1)/2;
     if ((i%2==1)&&((p[x>>3]&(1<<(x&7)))==0)) nr=nr+n-n/i;
                else {for (j=1;j<=n;j++) a[j]=0;
                      if (i%2==0) for (j=2;j<=n;j+=2) a[j]=1;
                      for (j=3;j<=i/2;j=j+2)
                           {x=(j-1)/2;
                            if (((p[x>>3]&(1<<(x&7)))==0)&&(i%j==0))
                                         for (k=j;k<=n;k+=j) a[k]=1;
                            }
                      suma=0;
                      for (j=1;j<=n;j++) suma=suma+a[j];
                      nr=nr+n-suma;
                      }
      }

  fout=fopen("fractii.out","w");
  fprintf(fout,"%d",nr);
  fclose(fout);

  return 0;

 }