Strona główna > Sito Eratostenesa > Sito Eratostenesa (duży zakres wykonany na strukturach)

Sito Eratostenesa (duży zakres wykonany na strukturach)

24 Styczeń 2011 Dodaj komentarz Go to comments
//Sito Eratostenesa
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include <stdio.h>
#include <stdlib.h>

typedef struct lista{
        int key;
        struct lista *next;
        struct lista *prev;
}lista;

void push(lista **head, lista **tail, int el)
{
     lista *nowy;
     nowy= (lista *)malloc(sizeof(lista));
     nowy->key=el;
     nowy->next=NULL;
     nowy->prev=NULL;

     if(*head==NULL){
         *head=nowy;
         *tail=nowy;
         }
     else{
         nowy->prev=(*tail);
         (*tail)->next=nowy;
         (*tail)=nowy;
         }
}
void pop(lista **head, int element)
{
     lista *tmp=(*head);
     if((*head)==NULL){
        printf("Brak el...");
        }
     else{
        while(tmp!=NULL && tmp->key!=element)
        tmp=tmp->next;
        if(tmp->next!=NULL){
           tmp->prev->next=tmp->next;
           free(tmp);}
        else{ tmp->prev->next=NULL;
           free(tmp);}
       }
}

void show(lista *head){
     if(head==NULL)printf("Brak el...");
     else while(head!=NULL){
     printf("%d   ", head->key);
     head=head->next;
     }
     }

void sito()
{
    lista *head=NULL;
    lista *tail=NULL;
    lista *wsk;
    lista *wsk2;
    lista *temp;
    int i,zakres;

    printf("Podaj zakres wyszukiwania: ");
    scanf("%d", &zakres);
    push(&head,&tail,2);
    push(&head,&tail,3);

    for(i=2;i<zakres;i++)
    {
        if(((i%2)!=0) && ((i%3)!=0))
        push(&head,&tail,i);
    }
    wsk2=head->next->next;
    wsk=wsk2->next;
    while(wsk2->key<floor(sqrt(zakres))){
    while(wsk)
    {
       if(((wsk->key)%(wsk2->key))==0)
       {
          temp=wsk->next;
          pop(&head,wsk->key);
          wsk=temp;
       }
       else wsk=wsk->next;
    }
       wsk2=wsk2->next;
       wsk=wsk2->next;
       }
       printf("Liczby pierwsze z zakresu 2 - %d \n", zakres);
       show(head);
       printf("\n\n");
}

int main()
{
    sito();
    system("pause");
    return 0;
}
  1. 5 Lipiec 2013 o 2:12 pm

    What’s up, I wish for to subscribe for this website to take newest updates, so where can i do it please assist.

  2. gay
    28 Lipiec 2013 o 7:39 pm

    Everyone loves what you guys tend to be up too. This sort of clever work and
    exposure! Keep up the terrific works guys I’ve you guys to my own blogroll.

  3. 12 Sierpień 2013 o 4:15 am

    It’s really a cool and useful piece of info. I’m satisfied that you just shared this useful info with us.
    Please stay us up to date like this. Thanks for sharing.

  4. AJK
    15 Marzec 2015 o 7:06 pm

    sito powinno przesiewać cały zakres przez kolejne znalezione liczby pierwsze. U Ciebie to przesiewa tylko wielokrotności 2 i 3. W związku z czym liczby 25 oraz 49 (i inne) są błędnie odbierane jako pierwsze.

  5. 17 Wrzesień 2016 o 11:32 pm

    This is really interesting, You’re an overly professional blogger.
    I’ve joined your feed and sit up for in quest of more of your wonderful post.
    Also, I have shared your site in my social networks

  1. No trackbacks yet.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: