Cod sursa(job #526340)

Utilizator maritimCristian Lambru maritim Data 28 ianuarie 2011 01:17:11
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include<iostream>
using namespace std;

typedef struct _nod
{
   char info;
   struct _nod *adr;
} nod;

long int n;
long int nr = 0;
nod *cap = (nod*)malloc(sizeof(nod));
nod *coada;
char A[2000001];

void citire(void)
{
     FILE *f = fopen("ciur.in","r");
     
     fscanf(f,"%d",&n);
     
     fclose(f);
}

void erathosteness(void)
{
     cap->info = 7;
     coada = cap;
     for(int i=7;i<=n;i++)
     if(i%2 && i%3 && i%5)
     {
        nod *nou = (nod*)malloc(sizeof(nod));
        nou->adr = NULL;
        nou->info = i;
        coada->adr = nou;
        coada = nou;
     }
     nod *q = cap;
     while(q)
     {
       nod *w = q->adr;
       while(w)
       {
          if(w->adr)
            if(!(w->adr->info%q->info))
            {
//              nod *x = w;
              w->adr = w->adr->adr;
//              free(x);
            }
          w = w->adr;
       }
       q = q->adr;
       nr++;
     }
}

void erathosteness2(void)
{
     for(long int i=1;i<=n;i++)
        A[i] = 1;
     for(long int i=2;i<=n;i++)
        if(A[i])
        {
          nr ++;
          for(int j=i;j<=n;j+= i)
             A[j] = 0;
        }
}

void tiparire(void)
{
     FILE *f = fopen("ciur.out","w");
     
     nod *q = cap;
/*     while(q)
     {
       fprintf(f,"%d ",q->info);
       q = q->adr;
     }
*/

     fprintf(f,"%d",nr);
     
     fclose(f);
}

int main()
{
    citire();
    erathosteness2();
    tiparire();
}