Cod sursa(job #516384)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 23 decembrie 2010 21:09:32
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
#include<stdlib.h>
typedef struct nod
{long info;
struct nod *urm;}Nod,*list;

void add(list &l,long x)
{Nod *p,*nou=new Nod;
nou->info=x;
nou->urm=NULL;
if(l==NULL)
      {l=nou;
      return;}
p=l;
while(p->urm!=NULL)
      p=p->urm;
p->urm=nou;}

void del(list &l,long x)
{Nod *p=l,*q=l;
while(p!=NULL&&p->info!=x)
      {q=p;
      p=p->urm;}
if(p!=NULL)
      {if(q==p)
           l=l->urm;
      else
           q->urm=p->urm;
      free(p);}}

int find(list &l,long x)
{Nod *p=l;
while(x!=p->info&&p!=NULL)
      p=p->urm;
if(p->info==x)
      return 1;
return 0;}

int main()
{long n,t,j,k,v;
freopen("ciur.in","r",stdin);
freopen("ciur.out","w",stdout);
list l=NULL;
scanf("%ld",&n);
for(j=2;j<=n;j++)
     add(l,j);
k=n;
j=2;
while(j*j<=n)
     {if(find(l,j)==1)
           for(t=2;t*j<=n;t++)
                  {del(l,t*j);
                  k--;}
     j++;} 
printf("%ld",k);
return 0;}