liczba pierwsza problem

moniac91
Użytkownik
Użytkownik
Posty: 83
Rejestracja: 6 lis 2010, o 12:35
Płeć: Kobieta
Podziękował: 1 raz

liczba pierwsza problem

Post autor: moniac91 »

Napisałam program ale coś w nim nie działa. Policzyłam sobie na kartce, ze dla 1,2,3,4,5 podane wyrażenie daje liczbe pierwszą, a program wyswietla mi, że nie. Może ktoś poprawić mój błąd lub jakoś nakierować? Dopiero od niedawna uczę sie programowania w C.. :/

Kod: Zaznacz cały

#include <stdio.h>

main()
{
	int n, i, k;
	printf("Program sprawdza czy dla dowolnej liczby n liczba n^2-79n+1601 jest liczba pierwsza.
");
	printf("Podaj n: ");
	scanf("%d",& n);
	i=(n*n)-(79*n)+1601;
	for(k=2;k<i;k++){
	if(i%k==0)
	printf("Dla podanej liczby n liczba n^2-79n+1601 jest liczba pierwsza
");

    else printf("Dla tego n liczba nie jest liczba pierwsza
");
	}
}
Awatar użytkownika
Errichto
Użytkownik
Użytkownik
Posty: 1629
Rejestracja: 17 mar 2011, o 18:55
Płeć: Mężczyzna
Lokalizacja: Suwałki
Podziękował: 28 razy
Pomógł: 272 razy

liczba pierwsza problem

Post autor: Errichto »

Odwrotnie.
Jeśli reszta==0 to wypisz("nie jest pierwsza")
else wypisz ("jest")-- 22 mar 2011, o 20:21 --Odwrotnie.
Jeśli reszta==0 to wypisz("nie jest pierwsza")
else wypisz ("jest")
moniac91
Użytkownik
Użytkownik
Posty: 83
Rejestracja: 6 lis 2010, o 12:35
Płeć: Kobieta
Podziękował: 1 raz

liczba pierwsza problem

Post autor: moniac91 »

Faktycznie. Małe niedopatrzenie. Dzieki

-- 24 mar 2011, o 20:25 --

Jeszcze jeden problem.. Dla n=80 mam , że to wyrażenie jest równe 1681 = 41^2, a program wypisuje mi, że jest to liczba pierwsza.. Nie wiem dlaczego. :/-- 25 mar 2011, o 17:36 --Nikt nie wie?
Awatar użytkownika
thenighthawk4
Użytkownik
Użytkownik
Posty: 76
Rejestracja: 31 sty 2011, o 20:18
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 7 razy

liczba pierwsza problem

Post autor: thenighthawk4 »

1. Nie musisz sprawdzać wszystkich dzielników od 2 do i, wystarczy do pierwiastka z i.
2. Wydaje mi się, że nie ma potrzeby wypisywania za każdym przebiegiem pętli, czy liczba jest pierwsza, tym bardziej, że będzie to wiadome dopiero po sprawdzeniu wszystkich dzielników, których zresztą nie musisz wypisywać.
3. Moja propozycja:

Kod: Zaznacz cały

#include <stdio.h>
#include <math.h>

main()
{
   int n, i, k;
   printf("Program sprawdza czy dla dowolnej liczby n liczba n^2-79n+1601 jest liczba pierwsza.
");
   printf("Podaj n: ");
   scanf("%d",& n);
   i=(n*n)-(79*n)+1601;
   
   for(k=2;k <= sqrt(i);k++)
   {
       if(i%k == 0)
       {
              printf("Dla tego n liczba nie jest liczba pierwsza
");
              return 0;
       }
       
       else 
            continue;
   }
   printf("Dla tego n liczba jest pierwsza");
   return 0;
}
W liniach 15-19 sprawdzamy, czy liczba jest złożona. Gdy okaże się, że tak, nie ma potrzeby dalej sprawdzać i można zakończyć działanie programu. Wtedy linia 23 się nie wykona.

4. Jeżeli nie uruchamiasz programu z linii komend, to nie ujrzysz rezultatów. Możesz np. wstrzymać zamknięcie w odpowiednich punktach programu; opakować program pętlą główną, a tym samym umożliwić sobie wielokrotne sprawdzanie liczb podczas jednego uruchomienia; zamiast mojego rozwiązania możesz zastosować zmienną tzw. flagę, której wartość ustawisz w zależności od tego, czy liczba jest pierwsza, a po wyjściu z pętli sprawdzisz jej wartość i dobierzesz odpowiedni komunikat; ... ;
Ostatnio zmieniony 25 mar 2011, o 18:56 przez thenighthawk4, łącznie zmieniany 1 raz.
Awatar użytkownika
Errichto
Użytkownik
Użytkownik
Posty: 1629
Rejestracja: 17 mar 2011, o 18:55
Płeć: Mężczyzna
Lokalizacja: Suwałki
Podziękował: 28 razy
Pomógł: 272 razy

liczba pierwsza problem

Post autor: Errichto »

thenighthawk4 pisze:

Kod: Zaznacz cały

for(k=2;k <= sqrt(i);k++)
Jeśli już tak się czepiamy, to lepiej zapisać

Kod: Zaznacz cały

for(k=2;k*k<=i;k++)
bo pierwiastek nie należy do szybkich funkcji - mnożenie jest dużo szybsze (przy modulo w tej pętli, mnożenie będzie niemal pomijalnie szybkie).
moniac91 pisze:Jeszcze jeden problem.. Dla n=80 mam , że to wyrażenie jest równe 1681 = 41^2, a program wypisuje mi, że jest to liczba pierwsza.. Nie wiem dlaczego. :/
Po poprawieniu tamtego błędu wszystko jest ok. Wypisuje, że nie jest pierwsza...
moniac91
Użytkownik
Użytkownik
Posty: 83
Rejestracja: 6 lis 2010, o 12:35
Płeć: Kobieta
Podziękował: 1 raz

liczba pierwsza problem

Post autor: moniac91 »

juz wiem co i jak. dzięki wielkie
ODPOWIEDZ