• 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

Object Storage Arubacloud
0 głosów
376 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,016 wizyt
pytanie zadane 4 maja 2019 w SPOJ przez Psz3mo Mądrala (5,030 p.)
0 głosów
2 odpowiedzi 576 wizyt
pytanie zadane 1 lipca 2018 w SPOJ przez Fernokip Nowicjusz (180 p.)
0 głosów
1 odpowiedź 184 wizyt
pytanie zadane 13 lutego 2021 w SPOJ przez Parex Nowicjusz (200 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...