Czy n jest liczbą pierwszą? Liczba pierwsza, wiadomo, nie ma

Transkrypt

Czy n jest liczbą pierwszą? Liczba pierwsza, wiadomo, nie ma
Czy n jest liczbą pierwszą?
Liczba pierwsza, wiadomo, nie ma innych podzielników niż 1 i ona sama.
Próbujemy więc dzielić n przez możliwe podzielniki p, zaczynając od p=2, a kończąc … no właśnie.
Można liczyć aż do p=n-1, ale to jest dużo niepotrzebnej pracy.
Wystarczy liczyć do p=n/2, bo jeśli w przedziale <2; n/2> nie ma podzielnika, to dalej też nie będzie.
Najlepiej jest liczyć tylko do p=sqrt(n), jeśli dotąd nie ma podzielnika, to dalej też nie będzie.
Uwaga: funkcja sqrt(n) wymaga #include <cmath>
int n;
cout << "daj n ";
cin >> n;
bool pierwsza = true;
int p = 2;
while (p<=sqrt(n))
{
if (n%p == 0)
{
pierwsza = false;
break;
}
p++;
//
//
//
//
przypuśćmy że n jest liczbą pierwszą
weźmy najmniejszy możliwy podzielnik
dopóki podzielnik nie przekracza sqrt(n)
powtarzaj
// jeśli reszta z dzielenia n/p równa 0
// zapamiętaj że n nie jest liczbą pierwszą
// przerwij poszukiwanie podzielników
// w przeciwnym razie wypróbuj
// następny podzielnik
}
if (pierwsza) cout << "liczba pierwsza\n";
else cout << "liczba złożona\n";
// wypisz wynik
Funkcja w C++
Funkcja jest blokiem kodu: jedna lub wiele instrukcji ujęte w nawiasy { }, posiadajacym własną nazwę.
Może zwracać wynik, ale nie musi, jeśli jej zadaniem jest tylko wykonanie operacji (np. wypisz coś).
W programie może wystąpić wiele funkcji o różnych nazwach.
W programie musi wystąpić funkcja o nazwie main. Od niej system operacyjny rozpoczyna wykonanie
całego programu. Wewnątrz funkcji main mogą być wywołania innych funkcji.
Inne funkcje, wywoływane w funkcji main, muszą być zdefiniowane przed funkcją main w programie.
Funkcja main zwraca do systemu operacyjnego wynik: liczbę całkowitą. Wynik 0 oznacza, że funkcja
wykonała poprawnie wszystkie operacje.
int main() {
// jakieś operacje
return 0;
}
Definicja funkcji ma następującą postać:
typWyniku nazwaFunkcji (typParametru nazwaParametru)
{
// jakieś operacje
return wynik;
}
Słowo kluczowe return kończy wykonanie funkcji. W kodzie funkcji może ono wystąpić kilkakrotnie,
zawsze oznaczając zakończenie wykonywania funkcji, nawet jeśli dalej są jeszcze inne polecenia.
Jeśli funkcja nie zwraca wyniku, wówczas typ wyniku jest void, zaś słowo return może nie
wystąpić, wówczas funkcja automatycznie zakończy pracę gdy wykona wszystkie operacje.
Funkcja może nie pobierać żadnego parametru, wówczas zawartość nawiasów ( ) po nazwie funkcji
jest pusta, ale te nawiasy muszą być.
Przykład: definicja funkcji, która sprawdza czy podana liczba a jest liczbą pierwszą:
bool Pierwsza(int a) {
int dzielnik = 2;
while ( dzielnik <= sqrt(a))
{
if (a%dzielnik == 0) return false;
dzielnik ++;
}
return true;
}
Zastosowanie tej funkcji w programie do zbadania czy dana liczba n jest liczbą pierwszą:
int main() {
int n;
cout << "daj n ";
cin >> n;
if (Pierwsza(n)) cout << "liczba pierwsza\n";
else cout << "liczba złożona\n";
return 0;
}
Przy wywołaniu funkcji podstawia się zmienną n w miejsce parametru formalnego a, który w definicji funkcji służy jedynie jako „atrapa”. Wszystkie operacje zdefiniowane dla parametru
a funkcja wykona teraz na „prawdziwej” zmiennej n.
Zastosujmy naszą funkcję Pierwsza(a) do wyszukania wszystkich liczb pierwszych z przedziału od 2 do danej liczby n.
int main() {
int n;
cout << "daj n ";
cin >> n;
cout << "Liczby pierwsze z przedziału od 2 do " << n << endl;
for (int i=2; i<=n; i++)
if (Pierwsza(i)) cout << i << " ";
cout << endl;
return 0;
}

Podobne dokumenty