Cześć i witaj.
Chciałbym zapewnić demonstracja rozwiązania naszego
poprzedniego wyzwania, które polegało na napisaniu programu generującego
liczby pierwsze.
I znowu, cały punkt tego programu było użycie tablicy, chcesz
się wszystkiego nauczyć o tablicach i zrób to.
Więc próbowałem opisać algorytm liczb pierwszych przed.
Ale żeby jeszcze raz o tym wspomnieć, możesz sprawdzić, czy
liczba pierwsza jest liczbą pierwszą.
Liczba pierwsza to oznacza uh, nie da się go równo
podzielić przez żadną inną liczbę pierwszą.
Więc to jest algorytm pojęcia że mamy zamiar przejść.
I powód, dla którego tak jest liczba pierwsza wynika z tego, że można wyrazić dowolną
liczbę całkowitą inną niż pierwsza jako wielokrotność czynników pierwszych.
Na przykład 20 ma rozszerzenie czynniki pierwsze 2 2 i 5.
Więc wiedząc o tym, to ci mówi że liczby pierwsze nie są podzielne równo
przez żadną inną liczbę pierwszą.
Więc to może pomóc zrobić bardzo skuteczny test liczb pierwszych.
Więc to, co możesz zrobić, to ty może sprawdzić
wygenerowane wcześniej liczby pierwsze.
Więc możemy przechowywać nasze poprzednie pliki
wygenerował liczby pierwsze w tablicy i tak właśnie jest może znaleźć te informacje.
Również dowolna 9 pierwsza liczba całkowita n musi mieć jako jeden ze swoich współczynników liczbę
całkowitą mniejszą niż lub równy pierwiastkowi kwadratowemu z n.
Oznacza to, że jest to tylko konieczne aby określić, czy dana liczba
całkowita jest liczbą pierwszą, testując ją na parzystość podzielność na wszystkie czynniki pierwsze do
pierwiastka kwadratowego z liczby całkowitej.
Możesz więc zatrzymać się w tym miejscu i znowu czyni to bardziej wydajnym.
To będzie zauważalne w mojej wewnętrznej pętli, kiedy wyskakuję,
aby określić, czy ja nie znalazłem liczby pierwszej.
Mam zamiar wyskoczyć, jeśli mi się uda pierwiastek kwadratowy liczby całkowitej, jest to
zasadniczo warunek wyjścia.
Więc przejdźmy przez i drogę że możesz
to sprawdzić, to po prostu powiesz p podzielone przez liczby pierwsze jest większa niż pierwsza pod-I i użyjemy jej
w najbardziej wewnętrznej pętli do sprawdzić, czy wartość p przekracza pierwiastek kwadratowy
z liczby pierwszej I.
Więc przejdźmy dalej i przynieśmy kod bloków, aby rozpocząć pisanie kodu.
Zrobimy podstawy tutaj utwórz projekt.
Nazwiemy nasz projekt o nazwie liczby pierwsze.
Przejdźmy więc
do nowego projektu i przejdźmy do aplikacji konsolowej.
I nazwiemy to liczbami pierwszymi.
Powiedz dalej, nie jedziemy używać tego kompilatora.
Bawiłem się kompilatory Chcę się upewnić, że mam
odpowiedni kompilator po prostu użyj kompilatora cygwin.
Więc generuje mój plik main plik źródłowy i jest pusty.
Pozbądźmy się printf i zacznij pisać kod.
Zamierzamy dołączyć plik plik o nazwie standard bull.
Jeszcze tego nie zrobiłem; Byłem tworząc moje Booleans jako podkreślenia.
Po prostu zróbmy mały test, Chcę móc robić bool.
Więc teraz możemy użyć bools.
Zwykle w C89 jest to typ danych dla prawda lub fałsz jest podkreśleniem bool.
Ale właściwie możesz mieć typ definicja w nowszych wersjach oraz w standardowym pliku bool
do po prostu użyj bools, a także pozwala ci
używać true false jako wartości.
Więc musimy coś stworzyć zmienne tutaj najpierw.
Stworzymy nasz licznik który nazwiemy po prostu p.
To będzie nasz licznik dla naszej pętli od momentu,
gdy sprawdzimy od p do 100 liczb.
To będzie nasza zewnętrzna pętla.
Zamierzamy również utworzyć plik zmienna dla naszego licznika pętli wewnętrznej.
Tutaj sprawdzamy nasze poprzednie liczby pierwsze.
Właściwie nie zainicjujemy go tutaj zainicjujemy go w pętli.
Stworzymy naszą tablicę która będzie liczbą całkowitą liczb pierwszych
i będzie miała rozmiar 50.
I nie będziemy inicjować na razie nic innego niż 0.
A potem utworzymy plik indeks główny, a to
pomoże nam pominąć wszystkie nasze liczby parzyste, a po prostu ustawimy to na 2.
Ta zmienna faktycznie działa aby upewnić
się, że zaczynamy od właściwego indeksu, ponieważ idziemy zakodować pierwsze 2 cyfry.
To właśnie zamierzamy zrobić najpierw.
Idziemy na twardy kod nasze pierwsze 2 liczby pierwsze.
W ten sposób możemy uzyskać dostęp do tablicy.
Wiemy, jak stworzyć tablicę liniową 10, wystarczy określić typ danych, po którym
następuje nazwa, a następnie w w nawiasach kwadratowych określamy rozmiar.
A potem inicjalizujemy wszystko do 0, to jest cecha
C99, którą możemy zrobić.
Aby przypisać dane do tablicy, Mogę po prostu powiedzieć nazwę tablicy, a
następnie wartość indeksu.
Pamiętaj, tablice są oparte na 0.
Więc powiem, że liczba pierwsza pod-0.
Pierwsza liczba pierwsza będzie równa 2.
2 to pierwsza liczba pierwsza.
Druga liczba pierwsza to będzie równa 3.
W ten sposób mam pewną liczbę
pierwszą liczby, które mogę wcześniej przetestować, aby znaleźć dodatkowe liczby pierwsze.
A teraz nadchodzi nasza pętla.
Będziemy potrzebować zewnętrznego pętla przechodząca przez wszystkie liczby
od 5 do 100.
Wiemy, że 4 nie jest liczbą pierwszą więc dopiero zaczynam o 5.
Możemy więc powiedzieć, że 4 p równa się 5, p to mniejsze lub równe 100, a
następnie pominiemy liczby parzyste.
Więc zamierzamy powiedzieć p równa się p plus 2.
Nie musimy szukać liczb, to będzie nasza zewnętrzna pętla.
I znowu powinieneś testowanie na bieżąco.
Teraz też będziemy ustawiać w górę zmiennej boolowskiej, która powie nam, czy
nie znaleźliśmy liczbę pierwszą.
Oto gdzie mogę użyć bool, i mam zamiar po prostu
utworzyć lokalną zmienną Boolean jest liczbą pierwszą.
Muszę to zainicjalizować powiedzenie jest prawdą, ponieważ ustawię to na fałsz tylko wtedy, gdy
tak jest przeszedł przez całą listę wcześniej wygenerowanych
liczb pierwszych lub Dotarłem do ostatniej liczby pierwszej i upewniam się, że nie jest to
pierwiastek kwadratowy.
Więc będzie pierwsza równe true dla każdej iteracji od
5 do 100 pomijanie 2.
Teraz moja wewnętrzna pętla odejdzie przez wszystkie nasze liczby pierwsze,
które wcześniej wygenerowaliśmy.
Spraw, abyśmy nie stali się lepsi niż pierwiastek kwadratowy z I.
Więc przejdziemy przez wszystkie liczby, aż dojdziemy do pierwiastka kwadratowego, to może być
nasz warunek x.
Zamierzamy też wyjść jeśli znaleźliśmy liczbę pierwszą.
Więc powiemy, czy jest liczbą pierwszą jest prawdą i przekroczyliśmy
nasz limit, który będzie p podzielona przez liczbę pierwszą pod-I jest większa lub
równa liczbie pierwszej pod-I.
A potem mamy zamiar plus plus I jest naszą zmienną sterującą pętlą.
To jest naprawdę klucz do algorytmu.
Więc spróbujemy znajdź wszystkie nasze liczby
pierwsze od 5 do 100 pomijając liczby parzyste.
A potem w naszej wewnętrznej pętli jesteśmy zaczniemy
od 1, przejdziemy do końca, dopóki nie ustawimy jest pierwsza na prawdę lub osiągnęliśmy nasz warunek wyjścia, którym
jest liczba p podzielona przez liczbę pierwszą pod-I jest większa niż liczba pierwsza pod-I
i to jest zasadniczo kończąc na naszym, gdy znajdziemy pierwiastek kwadratowy, ponieważ
to jest inny warunek algorytmu.
Jeśli to nasza pętla, w środku naszej pętli, będziemy
faktycznie sprawdzać liczby pierwsze.
Sposób, w jaki liczba jest liczbą pierwszą czy podzielisz to przez liczbę.
A jeśli nie masz 0, więc możesz iść.
Możesz więc po prostu zrobić mod p prime sub-I równa się 0.
A jeśli to prawda, to
nie masz liczby pierwszej.
Możesz więc ustawić Wartość logiczna równa fałszowi.
A potem to właśnie robimy przez całą pętlę, ponieważ wszystko, co
robimy, to idziemy aby ustawić wartość logiczną na fałsz.
A to nam powie, że tego nie zrobiliśmy znajdź liczbę pierwszą, więc nie chcemy
dodawać p do naszej tablicy liczb pierwszych.
Okay, więc ostatnią rzeczą do zrobienia jest po prostu sprawdź, czy wartość Boolean została ustawiona na true,
jeśli została ustawiona na true, to chcemy wypełnić naszą tablicę.
Chcemy dodać go do tablicy. Więc byliśmy dodając do tablic, znajdujemy liczbę pierwszą.
Więc mówimy po prostu liczby pierwsze i wtedy mówimy o indeksie głównym.
Ponieważ pamiętaj, to jest ten jest to naprawdę reprezentowane przez indeks
miejsca, w którym chcemy umieścić tablica, którą chcemy rozpocząć od elementu 3, który
ma indeks 2.
Więc chcemy się upewnić, że to umieścimy we właściwym miejscu w tablicy
i ustawiamy go na p, ponieważ p jest tą liczbą pierwszą znaleźliśmy, ponieważ pamiętaj, że jest to zewnętrzna pętla for.
Próbujemy sprawdzić, czy to jest liczba pierwsza.
Zaczynamy o 5.
Mówimy, że jeśli 5 będzie liczbą pierwszą, jeśli możemy przejść do tych liczb zaczynających się od 1, a następnie
porównać z dowolnymi poprzednie liczby pierwsze i jeśli nie jest podzielne przez 0,
to jesteśmy dobrzy i musimy to robić dla wszystkiego.
A potem ostatnia rzecz my chcemy po prostu
zwiększyć ten indeks główny.
Więc następnym razem znajdziemy liczbę pierwszą numer, jesteśmy we właściwym indeksie.
I to wszystko.
I to jest całość algorytm znajdowania liczb pierwszych.
Więc chcesz to zapisać i zbudować to, upewnij się, że wszystko jest w porządku.
Były dobre.
Więc lubię dodawać prawdziwe fałsz wartości, włączając standardowe bool, nie
zapominaj o tym.
A potem ostatnia rzecz my musimy tylko
wydrukować liczby pierwsze.
Możemy więc mieć prostą pętlę for.
I zamierzamy je wydrukować wszystkie w tej samej linii, więc nie
będziemy dodawać nowego wiersza.
Więc to, co zamierzamy zrobić, to zamierzamy ponownie utworzyć
instancję naszej zmiennej kontrolnej pętli na 0 I.
Pójdziemy aż do naszego indeks główny, który będzie wielkością wszystkiego
w tablicy i po prostu wydrukuj to w jednym
wierszu, procent I lub di pierwszy pod-I.
A na samym końcu dodamy nowy wiersz.
Coś w tym stylu ze średnikiem.
Ale znowu, rzeczy do uwaga w tym programie.
Najpierw zwróć uwagę na wcięcie, wszystkie bloki są wcięte.
Czasami używamy nawiasów, gdy mamy więcej niż jedno polecenie
w naszych blokach, czasami nie.
W tym przypadku oświadczenie on-line 25, nie użyliśmy żadnych nawiasów.
Na pętle powinny stać już trochę druga natura.
Naprawdę to, na czym chcesz zyskać to przypisanie to tablice.
Więc tworzymy tablicę zwaną liczbami pierwszymi, ustawiając rozmiar 50, inicjalizując wszystko na 0.
A potem ustawiamy pierwszy 2 elementy na
2 i 3 a potem cały ten algorytm od 19 do linie 32 określają, czy
jest to liczba pierwsza, patrząc na tablicę w poprzednich liczb pierwszych.
A także wyskakuje, kiedy jesteś większa niż pierwiastek kwadratowy.
I znowu widzisz dużo nawiasy kwadratowe, aby uzyskać dostęp do tablic
i przypisać wartości do tablic i wszystkiego, jest
to całkiem proste.
Zbudujmy to i zobacz, co się stanie.
Nie mamy żadnych ostrzeżeń, żadnych błędów.
Jeśli to uruchomimy, co zobaczysz wyprowadzane są wszystkie liczby pierwsze do 100 2
3 5 7 11 13 17 19 23 29 31 37 41 43 i tak dalej.
To są wszystkie liczby pierwsze.
A liczba pierwsza to coś takiego tylko był tylko czynnikiem samym w sobie.
Nie możesz tego podzielić przez żadne inne liczba i nie ma reszty.
Więc 97 to jedyne 2 czynniki przejdź do tego, że są 1 i 97.
Więc znowu fajny, krótki program.
Zapewnię rozwiązanie.
Możesz to przeanalizować.
Ale znowu kluczowe wnioski, wszystko o tablicach, a także o standardowym boolu,
którego użyłem pozwoliło nam stworzyć logiczne typy danych
bez znaku podkreślenia b, a także pozwala na użycie
wartości true false zamiast 1 i 0.
Mam nadzieję że to pomoże. Dziękuję Ci.