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

[C][SPOJ] Liczby Pierwsze. Kłopoty z optymalizacją.

Mały hosting, OGROMNE możliwości
0 głosów
2,306 wizyt
pytanie zadane 18 marca 2016 w C i C++ przez marcin_w Gaduła (3,190 p.)
edycja 22 marca 2016 przez marcin_w

Witam wszystkich, mam problem z optymalizacją kodu który dotyczy tego zadania:

http://pl.spoj.com/problems/PRIME_T/

Nie chodzi mi o to, że jest błąd w kodzie tylko o to aby skrócić czas wykonywania programu. Próbowałem różnych sposobów, jednak SPOJ pokazuje czas, który wynosi 2,33 s i 2,34 s. Patrząc na zgłoszenia innych czas ten jest bliski 0.Wiem że, są tablice, algorytmy Eratostenesa itd. Nawet próbowałem jakoś przerobić je na potrzeby zadania(ze zrozumieniem), lecz nie udało mi się.  

Dlatego chciałbym prosić o podanie wskazówek, dzięki którym czas wykonania będzie krótszy. 

4 odpowiedzi

0 głosów
odpowiedź 18 marca 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
W twoim przypadku nie musisz sprawdzać wszystkich dzielników liczby tylko wystarczy do pierwiastka z tej liczny. Np dla 10 sprawdzasz czy dzieli się przez 2,3,4 resztę liczb pomijasz. Co nie zmienia faktu że twój algorytm jest nadal wolny
0 głosów
odpowiedź 18 marca 2016 przez MetGang Nałogowiec (34,360 p.)
1. Algorytm w osobnej funkcji.

2. Warunki specjalne - liczba jest równa 1 lub jest parzysta (bez 2) -> return true;

3. Iteracja i+=2 dzięki czemu ominiemy sprawdzanie parzystych w pętli.

4. constexpr :p
komentarz 18 marca 2016 przez jpacanowski VIP (101,940 p.)

1. Algorytm w osobnej funkcji.

CO ??!

komentarz 18 marca 2016 przez MetGang Nałogowiec (34,360 p.)
Przenieść kod z maina do innej funkcji, którą potem wywołasz z jakąś liczbą żeby zachować porządek i uczyć się dobrych nawyków.
komentarz 18 marca 2016 przez marcin_w Gaduła (3,190 p.)
Nie mogę zastosować zmiennej logicznej zwracającej true/false ponieważ w zadaniu ma zwracać tekst TAK lub NIE. Ja piszę w C a contexpr dotyczy C++.
komentarz 18 marca 2016 przez MetGang Nałogowiec (34,360 p.)
No to constexpr najzwyczajniej sobie odpuść. To że coś jest w funkcji nie znaczy, że musi zwracać bool. No ale skoro ma zwracać napis to zastosuj tylko 2, 3 punkty.
komentarz 18 marca 2016 przez marcin_w Gaduła (3,190 p.)
Wiem że funkcja niekoniecznie musi zwracać bool. No ale skoro ma zwrócić napis to musiałbym nadać funkcji typ char tak ?
komentarz 18 marca 2016 przez MetGang Nałogowiec (34,360 p.)
No poniekąd char* musiałaby zwracać, ale pewien nie jestem czy by coś nie rypło. Póki co zastosuj inne punkty, a potem ewentualnie rozpatrz przeniesienie.
komentarz 18 marca 2016 przez marcin_w Gaduła (3,190 p.)
Nie rozumiem tego czyżby mój warunek if(n <2) był wolniejszy od tego, który ty podałeś ? Dlaczego mam iterować pętle i+=2 skoro pierwsza pętla służy do określania liczby testów a druga dotyczy liczby ? Pogubiłem się.
0 głosów
odpowiedź 18 marca 2016 przez Noak Mądrala (5,900 p.)
0 głosów
odpowiedź 22 marca 2016 przez event15 Szeryf (93,790 p.)
komentarz 22 marca 2016 przez marcin_w Gaduła (3,190 p.)
W porządku usunąłem kod.

Podobne pytania

0 głosów
2 odpowiedzi 1,140 wizyt
pytanie zadane 16 lutego 2017 w SPOJ przez marcingrychtol Obywatel (1,490 p.)
0 głosów
2 odpowiedzi 356 wizyt
pytanie zadane 19 lipca 2016 w C i C++ przez DamianW Bywalec (2,080 p.)
–1 głos
1 odpowiedź 163 wizyt
pytanie zadane 9 kwietnia 2016 w Nasze projekty przez MisterVento3 Użytkownik (830 p.)

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,258 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...