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

SPOJ - liczby pierwsze niezrozumiały błąd

0 głosów
858 wizyt
pytanie zadane 2 stycznia 2020 w SPOJ przez Bezk Nowicjusz (140 p.)
edycja 2 stycznia 2020 przez Bezk

Witam, przeszukałem wiele wątków na temat tego zadania https://pl.spoj.com/problems/PRIME_T/. Jednak nigdzie nie znalazłem rozwiązania swojego problemu. Gdy sędzia sprawdza kod wyskakuje mi błędna odpowiedź. Nie rozumiem dlaczego przecież wszystko działa jak należy. Jeśli chodzi o kod to zamieszczam tylko środek pętli for wykonującej się tyle razy ile podał użytkownik:



        for(int i=1; i<=a; i++)
        {
            if (a%i==0)
                b++;
        }
        if(a==1)
            cout << "NIE" << endl;
        else if(a==0)
            cout << "NIE" << endl;
        else if(b==2)
            cout << "TAK" << endl;
        else
            cout << "NIE" << endl;
    }

 

komentarz 2 stycznia 2020 przez DragonCoder Nałogowiec (36,500 p.)
1. A po co ma sie wykonac tyle razy ile podal user?

2. Wiesz, zetylko jeden if jest w petli? Wiec nie wiem, co to ma robic do konca

3. Link do zadania?
komentarz 2 stycznia 2020 przez Bezk Nowicjusz (140 p.)
Ma się wykonać n razy
komentarz 2 stycznia 2020 przez DragonCoder Nałogowiec (36,500 p.)
Ale co ma sie wykonac n razy? Poki co to wykonuje sie n razy i sprawdza, czy a mod i jest rowne 0,jesli tak to inkrementuje b. Czym kolwiek b jest. Pokazujesz urywek kodu, bez tresci do zabania, z nazwami nazw zmiennych, ktore nic nie mowia, wiec ciezko cos wywnioskować.
komentarz 3 stycznia 2020 przez Aisekai Nałogowiec (42,190 p.)

@Bezk, w 6 i 8 linijce masz zmienną a zamiast b. 

komentarz 3 stycznia 2020 przez Bezk Nowicjusz (140 p.)

@DragonCoder,

#include <iostream>

using namespace std;

unsigned int a, b, n;

int main()
{
    cin >> n;
    b=0;

    for(int i=1; i<=n; i++)
    {
        cin >> a;

        for(int i=1; i<=a; i++)
        {
            if (a%i==0)
                b++;
        }
        if(a==1)
            cout << "NIE" << endl;
        else if(a==0)
            cout << "NIE" << endl;
        else if(b==2)
            cout << "TAK" << endl;
        else
            cout << "NIE" << endl;
    }


}

 

komentarz 3 stycznia 2020 przez DragonCoder Nałogowiec (36,500 p.)
1. Zmiene na lokalne 2. Czemu 2x uzywasz i? Skad program ma wiedzoec, które i ma uzyc? 3. Zdecyduj się, czy w ifach chcesz sprawdzic, czy moze jednak b
komentarz 3 stycznia 2020 przez Bezk Nowicjusz (140 p.)
1. Zmienne dałem na lokalne 2. Zmieniłem nazwę drugiego iteratora 3. (dolny)if jest przecież po to by sprawdzić ile razy if u góry się wykonał a b jest licznikiem
komentarz 4 stycznia 2020 przez Aisekai Nałogowiec (42,190 p.)
Przede wszystkim, nigdzie nie zerujesz wartości zmiennej b. Przez to, od maksymalnie 3 iteracji, program będzie wypisywal że liczba nie jest liczbą pierwsza. Jeżeli chcesz już takie podejście, to czy nie lepiej iteracje w 18 linii zacząć od 2 a skończyć na a-1? Wtedy szukasz tylko dzielnikow różnych od 1 i od a, więc jeżeli jakakolwiek liczba pomiędzy będzie dzielnikiem liczby a, to liczba nie jest pierwszą. Optymalniej też, byloby szukać do pierwiastka liczby. W obecnym stanie, if w 23 i 25 jest zbędny. Dla a=1 i a=0, b = 1 lub b=0
komentarz 22 stycznia 2020 przez Bezk Nowicjusz (140 p.)
@Aisekai

Działa

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 1,436 wizyt
pytanie zadane 4 maja 2019 w SPOJ przez Psz3mo Mądrala (5,030 p.)
0 głosów
2 odpowiedzi 987 wizyt
pytanie zadane 1 lipca 2018 w SPOJ przez Fernokip Nowicjusz (180 p.)
0 głosów
1 odpowiedź 341 wizyt
pytanie zadane 13 lutego 2021 w SPOJ przez Parex Nowicjusz (200 p.)

93,774 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,378 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.

...