[C++] liczby pierwsze

Witam serdecznie potrzebuje pomocy w napisaniu następującego programu w języku C++. Program ma poprzez funkcje sprawdzać czy dana liczba jest liczbą pierwszą oraz ma wyznaczać liczby pierwsze z zadanego przedziału <2;k>. W kolejnej funkcji program ma wykorzystywać algorytm “sito Eratostenesa”. Za wszelką pomoc z góry dziękuję. Znam podstawy C++ więc prosiłbym o pomoc najlepiej w postaci kodu.

http://pl.wikipedia.org/wiki/Sito_Eratostenesa

To chyba powinno wystarczyć.

Dziękuje bardzo to odnosi się do 2 części programu. A ktoś może by mógł mi pomóc w pierwszej części programu?

Liczba jest liczbą pierwszą jeżeli nie dzieli się na 2 oraz na żadną nieparzystą liczbę w zakresie 3 … sqrt(Liczba).

Czy liczba jest w jakimś przedziale?

Jeśli tak to jednorazowo na początku puszczasz sito… i sprawdzasz czy podana liczba została wykreślona, jak nie to jest pierwsza.

Koledzy mam prośbę czy ktoś pomógłbym mi przerobić ten program na funkcje? Wiem, ze to zapewne proste ale niestety moja wiedza z c++ nie jest za wielka, wiec zwracam się z prośbą do Was.

#include

#include

main()

{

int x;

bool p;

cout<<"Podaj liczbe: ";

cin>>x;

if (x==1)

{

cout<<“Liczby 1 nie jest pierwsza!”;

}

if (x==0)

{

cout<<“Liczba 0 nie jest pierwsza!”;

}

else

{

p=true;

for (int i=2; i

{

if(x%i==0)

{

cout<<"Liczba "<

p=false;

break;

}

}

if (p==true) cout<<"Liczba "<

}

getch();

}

Przeczytaj pierwszy lepszy kurs (wystarczy nawet C) i będziesz sam w stanie to zrobić.

No dobrze doszedłem do tego. Ale mam jeszcze problem z tym programem. Mianowicie gdy wpisuje liczbę 0 to poprawnie wyskakuje komunikat, ze liczba 0 nie jest pierwszą, ale gdy wpisuje 1 to wyświetlają się dwa komunikaty liczba 1 nie jest pierwsza i liczba 1 jest pierwszą. W czym może tkwić błąd?

zamiast “if (x==0)” daj “else if (x==0)”

No to kolejne moje pytanie odnoszące się do sita Eratostenesa. W jaki sposób przerobić ten kod aby n było podawane z klawiatury przez użytkownika?

#include

#include

const int n = 100;

bool tab[n + 1];

main()

{

for (int i =2; i*i <= n; i++)

{

if (tab == true)

continue;

for (int j = 2 * i ; j <=n; j +=i)

tab[j] = true;

}

cout<<"Liczby pierwsze z przedzialu od 0 do "<

for (int i = 2; i<=n; i++)

if (tab == false)

cout<

getch();

}

… wprowadzając n z klawiatury oraz przydzielając tab dynamicznie.

int n;

cin>>n;

bool *tab=new bool[n+1];

Jeszcze jeden problem program wypisuje liczby tylko wtedy jeżeli przedział jest większy od 11. Pomoże ktoś?

Prawdopodobnie chodzi o brak inicializacji tablicy. Tablice zadeklarowane globalnie są zerowane, przydzielane dynamicznie - nie.

memset(tab,0,n);

No dziękuję bardzo.