#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źć?
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?
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
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.
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