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; ... ;