• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczby pierwsze SPOJ

Object Storage Arubacloud
0 głosów
344 wizyt
pytanie zadane 6 listopada 2018 w C i C++ przez endrju_69 Nowicjusz (120 p.)
Witam, mam problem z zadaniem 438 Liczby Pierwsze na SPOJ. Wszystko działa poprawnie kiedy samodzielnie sprawdzam liczby ale sędzia nie uznaje kodu (błędna odpowiedź). Proszę o pomoc. Link z kodem: https://pastebin.com/aeb8E6fD
komentarz 6 listopada 2018 przez Zaqu93 Gaduła (4,850 p.)
Możesz dać link do treści zadania? algorytm sprawdzający może nie uznać odpowiedzi bo jest gdzieś literówka...
komentarz 6 listopada 2018 przez endrju_69 Nowicjusz (120 p.)
 

Sprawdź, które spośród danych liczb są liczbami pierwszymi

Input

n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1..10000]

Output

Dla każdej liczby słowo TAK, jeśli liczba ta jest pierwsza, słowo: NIE, w przeciwnym wypadku.

komentarz 6 listopada 2018 przez endrju_69 Nowicjusz (120 p.)
Input:
3
11
1
4

Output:
TAK
NIE
NIE

2 odpowiedzi

0 głosów
odpowiedź 6 listopada 2018 przez Ksardias Początkujący (340 p.)
2 jest liczbą pierwszą, na pewno to masz błędne, co dalej nie wiem.
0 głosów
odpowiedź 6 listopada 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Ty testowałeś w ogóle ten swój kod, zanim wysłałeś go na SPOJa? Przecież on zwraca jakieś bezsensowne odpowiedzi - liczba 4 jest rzekomo pierwsza, a 11 już nie. laugh

Jak mój poprzednik słusznie zauważył, 2 jest liczbą pierwszą, więc ten if jest niepoprawny.

if(n==2)
    cout<<"NIE"<<endl;

Znasz definicję liczby pierwszej? Liczba pierwsza to taka, która dzieli się tylko przez 1 i przez samą siebie.

Ty natomiast w poniższej instrukcji warunkowej uznajesz, że liczba nie jest pierwsza, na podstawie tego, że nie dzieli się ona przez kolejne liczby naturalne. A liczba pierwsza ma być właśnie niepodzielna przez kolejne liczby naturalne (za wyjątkiem tych dwóch, o których wspomniałem wcześniej).

Najprostszym sposobem na sprawdzenie, czy liczba jest pierwsza, jest pętla:

for (unsigned i = 2; i <= sqrt(value); ++i) {
    //...
}

Rozpoczynamy sprawdzanie podzielności od liczby dwa, a kończymy na pierwiastku z liczby (jest to optymalizacja, jeżeli liczba nie jest podzielna przez wartości mniejsze od pierwiastka, to na pewno nie będzie też podzielna przez te większe - warto pomyśleć nad tym chwilę). W ten sposób pomijamy sprawdzanie podzielności przez 1 i przez samą siebie, bo to akurat podzielności oczywiste.

Podobne pytania

0 głosów
0 odpowiedzi 202 wizyt
pytanie zadane 1 sierpnia 2023 w C i C++ przez Jakub005 Początkujący (310 p.)
0 głosów
1 odpowiedź 295 wizyt
pytanie zadane 20 lutego 2023 w Python przez lukaskrol7 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 313 wizyt
pytanie zadane 7 listopada 2021 w Java przez danielxwbt Nowicjusz (150 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...