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

Zadanie - Liczby pierwsze

Object Storage Arubacloud
0 głosów
267 wizyt
pytanie zadane 2 sierpnia 2016 w SPOJ przez Steefler Nowicjusz (180 p.)
Cześć wszystkim,

wczoraj rozpocząłem zabawę ze SPOJem i rozwiązałem zadanie Liczby pierwsze. Problem polega na tym ,że mój kod działa, tzn kompiluje się i dla wszystkich liczb zwraca prawidłowe wyniki jednakże sędzia na SPOJu twierdzi inaczej. Piszę w Visual 2013. Sprawdziłem zgodnie z zaleceniami wszystkie ramki, ify itd i nie widzę żadnego błędu. W programie na standardowym wejściu to użytkownik podaje liczby, tak się teraz zastanawiam czy  program czasem nie powinien sam tych liczb losować?

 

Dzięki za jakąkolwiek wskazówkę! :)
komentarz 2 sierpnia 2016 przez Mr. Szanowny Bywalec (2,180 p.)
SPOJ sam poda na wejście swoje liczby więc rób to tak jakby ktoś sam miał to wpisać czyli: cin>>.

Przydałby się link do tego zadania, aby ludzie sami nie musieli go szukać i zachęcisz ludzi by choć trochę się zainteresowali tym pytaniem - niby szczegół ale wygodny. Trochę kodu też nie zaszkodzi.

Jeśli chodzi o nie przyjęcie programu przez spoj jest pełno możliwości - za dużo czasu może się wykonywać, nie przetestowałeś tego na krytyczne, negatywne sytuacje itd. Ale na tym polega SPOJ by wymusić upraszczanie, usprawnianie i znajdowanie lepszych rozwiązań.

2 odpowiedzi

0 głosów
odpowiedź 2 sierpnia 2016 przez manjaro Nałogowiec (37,390 p.)
wybrane 2 sierpnia 2016 przez Steefler
 
Najlepsza

Zakomentuj tylko ten pierwszy cout i będzie AC.

cout << "Wprowadz ilosc danych" << endl;

Ciekawy algorytm ale niestety bardzo wolny. Można go zoptymalizować i w sumie może będzie nawet całkiem dobry. Wystarczy dodać warunek w pętli liczenia dzielników

 if (liczba%j == 0)
            {
                licznik_dzielnikow++;
                if (licznik_dzielnikow >2)
                break;
            }

 

komentarz 2 sierpnia 2016 przez Steefler Nowicjusz (180 p.)
Dziękuję bardzo za pomoc! :) czas z 2,9 do 0,63!
komentarz 2 sierpnia 2016 przez manjaro Nałogowiec (37,390 p.)
Można jeszcze jedną optymalizację dodać aby dzielniki sprawdzać jedynie do pierwiastka liczby a nie całej liczby. Bo jak nie ma dzielników do pierwiastka to dalej już nie będzie.
0 głosów
odpowiedź 2 sierpnia 2016 przez Porcupine Nałogowiec (31,560 p.)
Nie, losować na pewno nie powinien. Więcej bez kodu trudno pomóc ;)
komentarz 2 sierpnia 2016 przez Steefler Nowicjusz (180 p.)
Tutaj wrzucam maina. http://pastebin.com/DvKCh7Y1

wcześniej mam zadeklarowane część zmiennych.

tutaj link do zadania http://pl.spoj.com/problems/PRIME_T/
komentarz 2 sierpnia 2016 przez Porcupine Nałogowiec (31,560 p.)
1) Twój program nie działa dla liczby = 1

2) Twój program jest ogólnie bardzo wolny i można go zoptymalizować co najmniej w 2 miejscach.

3) Nie powinieneś wypisywać zbędnych komunikatów w stylu "Podaj liczbę".
4) Popracuj nad stylem pisania, entery, trochę przesadzasz z tymi enterami ;)
komentarz 2 sierpnia 2016 przez Steefler Nowicjusz (180 p.)
1) No przy wpisaniu 1 wyskakuje komunikat NIE, bo 1 nie jest liczbą pierwszą.

2) Nie bardzo rozumiem co rozumiesz poprzez optymalizacje tak prostego kodu -> dopiero się uczę a na uczelni w zasadzie nie wspominają o tym

3) już poprawiłem.

4) Czy kod nie powinien być przede wszystkim przejrzysty? Pytam bo każda taka wskazówka na pewno pomoże :)
komentarz 2 sierpnia 2016 przez Porcupine Nałogowiec (31,560 p.)
1) Ok, nie uruchamiałem, tylko tak mi się wydawało jak widziałem ten warunek ==2
2)

Weźmy, że sprawdzasz czy 140 jest liczbą pierwszą, będziesz lecieć: 1, 2, 3, 4, 5, ..., 140? Skoro wiadomo, że każda liczba parzysta większa od 2, nie jest liczbą pierwszą.
Weźmy liczę 139 - wiesz już, że jest to liczba nieparzysta, więc po co masz sprawdzać podzielność 2,4,6,8,...,138 skoro liczba nieparzysta nie będzie podzielna przez liczbę parzystą?

3) :)
4) Więcej enterów != przejrzysty

Podobne pytania

0 głosów
2 odpowiedzi 575 wizyt
pytanie zadane 1 lipca 2018 w SPOJ przez Fernokip Nowicjusz (180 p.)
0 głosów
1 odpowiedź 381 wizyt
pytanie zadane 19 sierpnia 2020 w SPOJ przez Billy Użytkownik (680 p.)
0 głosów
0 odpowiedzi 213 wizyt
pytanie zadane 1 września 2019 w SPOJ przez Huti Nowicjusz (140 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...