Cod sursa(job #260284)

Utilizator mrpopescuPopescu Mihai Tudor mrpopescu Data 16 februarie 2009 21:19:20
Problema Ciurul lui Eratosthenes Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct lista{
	struct lista *urm;
   long nr;
} numar;
void adaugare(numar *p, long n){
   p->urm=malloc(sizeof(numar));
	p->urm->urm=NULL;
   p->urm->nr=n;
}
void creare(numar *p,long n){
	numar *i;
   long k;
   i=p;
   for(k=2;k<=n;k++){
       adaugare(i,k);
       i=i->urm;
   }
}
void stergere(numar *p){
	numar *aux=p->urm;
   p->urm=aux->urm;
   free(aux);
}
void ciur(numar *p,long n){
	numar *i,*j;
   for(i=p->urm;i->nr<sqrt(n);i=i->urm){
   	j=i->urm;
      while(j->urm!=NULL)
      	if((j->urm->nr)%(i->nr)==0) stergere(j);
          else j=j->urm;
   }
}
int main(){
	FILE *f=fopen("ciur.in","rt");
   long n,nrp=0;
   numar *p,*k;
   fscanf(f,"%ld",&n);
   fclose(f);
   creare(p,n);
   ciur(p,n);
   for(k=p->urm;k->urm!=NULL;k=k->urm){
   	++nrp;
   }
   k=p;
   while(k!=NULL){
   	p=k;
      k=k->urm;
      free(p);
   }
   f=fopen("ciur.out","wt");
   fprintf(f,"%ld",nrp);
   fclose(f);
   return 0;
}