Pomoc dla początkującego

0

Cześć,

chciałam napisać program w C wypisujący na ekran liczby pierwsze z przedziału. Niestety, mam jakiś bład, którego nie widzę. Ktoś może coś poradzić?

bool pierwsza(int a)
{
	for (int i=2; i<a; i++)    
	if(a%i==0)                
	{
		return false;         
	}
	else
	return true;
}
int main(int argc, char** argv) 
{
	int a, b, c;
	printf("podaj przedzial liczb w ktorych chcesz otrzymac liczby pierwsze\n");
	scanf("%d", &b);
	scanf("%d", &c);
	if (pierwsza(a))
	{
		printf("liczby pierwsze to %d", a);
	}
	
	return 0;
}
3

Nie ustalasz nigdzie a, a wywołujesz funkcję pierwsza przy użyciu tego parametru. Nie wykorzystujesz nigdzie przyjętych wartości bc.

0

Ok, teraz wypisuje. Tylko otrzymuję przynajmniej jedną liczbę, która nie jest pierwsza - 9. Jak się tego pozbyć?
Dzięki za pomoc :))

bool pierwsza(int a)
{
	for (int i=2; i<a; i++)    // sprawdzanie czy w przedziale od i do a istnieje liczba będąca dzielnikiem; i=2 bo to jest dzielnik zapisany za pomoca iteracji
	if(a%i==0)                // warunek, dzięki któremu sprawdze, czy reszta z dzielenia a przez i wyjdzie 0; jesli wyjdzie to to oznacza, ze i jest dzielnikiem liczby a 
	{
		return false;         // bool daje albo true, albo false; jesli zwrociloby mi true, to to by oznaczalo, ze chce otrzymac jakies i bedace dzielnikiem a
	}
	else
	return true;
}
int main(int argc, char** argv) 
{
	int a, b, c;
	printf("podaj przedzial liczb w ktorych chcesz otrzymac liczby pierwsze\n");
	scanf("%d", &b);
	scanf("%d", &c);
	for (a=b; a<=c; a++)
	if (pierwsza(a))
	{
		printf("\nliczby pierwsze to %d", a);
	}
	
	return 0;
}
3

Twój test pierwszości jest błędny — funkcja zwróci true przy pierwszej wartości, która nie będzie dzieliła zadanej liczby (w przypadku dziewiątki — bo dwójka jej nie dzieli). Chcesz się pozbyć z niej tego else i zwracać true dopiero wtedy, jak cała pętla się wykona.

0

Dzięki serdeczne, teraz wszystko działa :)

1

Zobacz jak da się skrócić:

bool pierwsza(int a)
{
    int i=(int)sqrt(a);
    while((i>=2)&&(a%i)) --i;
    return i<2;
}

:p
Ale nazwy zmiennych przydało by się zmienić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1