skręciłem program sprawdzający czy podana liczba jest liczbą 1 .Czasem program pokazuje dobrą odpowiedz czasem złą . Może ktoś mnie nakierować na błędy?
#include
#include
int main()
{
int p, i; //podano 2 zmiene p oraz i
printf("Podaj liczbe: ");
scanf("%d", &p); //wczytano p
if(p % i ==1 && p % i == p ){ //jeśli reszta z dzielenia z p=0
printf("jest liczba pierwsza.\n");
}else{ printf("nie jest liczbą 1\n");
}
return 0;
}
Zacznijmy od tego, że liczna pierwsza jest pierwsza kiedy dzieli się TYLKO przez 1 i przez samą siebie.
Twój program zwraca zawsze jest pierwsza z wyjątkiem gdy podasz 0. Bo tylko dla 0 reszta z dzielenia przez 1 dla 0 daje 1
Zacznij może od najbardziej łopatologicznej metody sprawdzenia wszystkich liczb po kolei do liczby którą podasz od 2 (bo przez 1 podzielić się musi). Jeśli coś znalazłeś wyświetl że nie jest pierwsza a w przeciwnym wypadku że jest.
Już wiesz, że masz sprawdzać czy dana liczba dzieli się przez inne liczby od niej mniejsze i większe od 1.
W tym celu wykonuj nie normalne dzielenie ale dzielenie modulo czyli takie dzielenie którego wynikiem jest właśnie reszta z dzielenia dwóch liczb.
W normalnym dzieleniu 5/2=2,5 a w dzieleniu modulo 5/2=1 bo tyle wynosi reszta z dzielenia liczby 5 przez 2.
czyli w twoim przykładzie wykonujesz działanie: reszta == liczba mod i gdzie ‘i’ to kolejne liczby mniejsze od danej liczby i większe od 1. Jeśli reszta będzie równa zero to wychodzisz z pętli bo liczba nie jest pierwsza.
Jak tworzyć pętlę?
for( i = 2; i <= liczba); ++i )
{
‘tu obliczanie reszty z dzielenia liczby przez liczbę ‘i’ która się zwiększa za każdym obiegiem pętli o 1’
Sandra po prostu należy wykonać prostą iteracjną wersje. Nie baw się na początku w złożoność. Bardzo tutaj pomaga stworzenie funkcji, która zwraca TRUE lub FALSE. Możesz pomóc sobie schematem blokowym.