[C] liczby pierwsze od 2 do n


(O2350695) #1
#include 


int main()

{

     int a, i;


     printf("Podaj liczbe: ");

     scanf("%d", &a);


	 for(i = 2; i < a; i++) 

     {


          if(a % i == 0)

          {

               printf("%d nie jest liczba pierwsza.\n", a);

               return 0;

          }         

     }


     printf("%d jest liczba pierwsza.\n", a);


     return 0;

}

Witam,

Mam problem, dopiero rozpoczynam przygodę z C i w sumie z programowaniem. Mam problem związany z przerobieniem powyższego kodu. W tej postaci wczytuje jedynie jedną liczbę i sprawdza czy jest liczbą pierwszą. Potrzebuję przerobić na taki aby wczytywał końcowy zakres przedziału np 100 i wypisywał liczby pierwsze z tego przedziału począwszy od 2 do n. Potrzebuję zrobić to nie używając tablic. Pomoże ktoś? Doradzi jak to ugryźć?


(Rolek0) #2

Najprościej chyba będzie wykonać test pierwszości na wszystkich liczbach od 2 do n i wypisać tylko te, które go przechodzą. Niefajnie, że nie możesz używać tablic, możnaby wtedy skorzystać np. z sita Eratostenesa. To jakieś zadanie szkolne?


(O2350695) #3

Można to tak ująć,

a jakby to wszystko for'em objąć i w tym przypadku p-1 robić. tylko kwestia tego, że jak coś nie jest liczbą pierwszą to wychodzi z prog, a nie chcę robić instrukcji skoku.

ewentualnie coś takiego:

#include 


int main()

{

     int a, i,j;


     printf("Podaj liczbe: ");

     scanf("%d", &a);


	poczatek:

	 for(i = 2; i < a; i++) 

     {


          if(a % i == 0)

          {

               //printf("%d nie jest liczba pierwsza.\n", a);

               a=a-1;

               goto poczatek;


          }         



     printf("%d jest liczba pierwsza.\n", a);

     a=a-1;

	}

     return 0;

}

Albo coś takiego (nie działa oczywiście za dobrze ;p) ale to już z instrukcją skoku

Oczywiście to może być wypisanie od 2 do n albo od n do 2, to nie ma znaczenia :slight_smile:


([alex]) #4

To są podstawy algorytmiki, najlepiej pasuje sito Eratostenesa.


(Rolek0) #5

goto potrafi utrudnić czytanie kodu, lepiej go nie stosować gdy istnieje lepsze rozwiązanie.

Możesz np. ustawiać flagę pierwszości na początku, a jeśli okaże się, że liczba nie jest pierwsza to zgasić flagę, a na końcu jeśli flaga jest ustawiona to wypisać, że liczba jest pierwsza.

przykład

Narazie, jak widzę, są podstawy programowania. A do sita Eratostenesa potrzebna jest tablica, co w zadaniu jest wykluczone :stuck_out_tongue:

PS. Nie znam dobrego kursu C, ale moge polecić dobre kursy C++

http://xion.org.pl/productions/texts/coding/megatutorial/

http://www.intercon.pl/~sektor/cbx/

Po nauczeniu się programowania, możesz doczytać czym różni się C od C++ http://pl.wikibooks.org/wiki/C :slight_smile:

Polecam również http://gynvael.coldwind.pl/?id=238


(O2350695) #6

Dzięki, właśnie o to mi chodziło !

przy okazji co oznacza samo

if(p)

bo przyzwyczajony jestem że warunek sprawdza się coś porównując z czymś.


(Rolek0) #7

Warunek musi być prawdziwy albo fałszywy, w if() możesz podać dowolne wyrażenie, przy czym 0 jest fałszywe a cokolwiek różnego od 0 jest prawdziwe, zresztą wynikiem porównania jest 0 albo 1, które dopiero jest sprawdzane przez if (co prawda kompilator może to zoptymalizować eliminując pośrednie wyniki ale taka jest logika w C). http://ideone.com/dTNnN7