10 / 22
Sep 2019
  1. ideone.com11 wykorzystuj nie do samego wklejania kodu i do kompiacji ale też do testowania - wklejaj do okienka stdin - input dane testowe.
  2. Gdybyś użya zmiennej lokalnej, zamiast globalnej[ pkt 2 by @korkirw], deklarując ją w odpowiednim miejscu [w środku pętli], miałabyś od razu AC.

Dziekuje za uwagi, bardzo mi pomogly
A co do nowego watku, to trafilam na regulamin zaraz po jego dodaniu, takze obiecuje poprawe w tej kwestii ;p

Gratuluje!

Warto poczytac o liczbach pierwszych i algorytmach.

Byłbym bardzo wdzięczny gdybym mógł się dowiedzieć dlaczego to nie zadziałało ? :confused:
#include

using namespace std;
int ile;
int w;
int x=0;
int main()
{
cin>>ile;
for(int i=0; i<ile; i++)
{

     cin>>w;
     x=0

    for(int i=2; i<w; i++)
    {
            if(w%i==0)
            {
            x=1;
            }

    }
    if(x==1)
    {
       cout<<"NIE" ;
    }

    else
    {
        cout<<"TAK";
    }

}

return 0;

}

Nie uwzgledniles przypadku z 1, ktora nie jest liczba pierwsza. Przeanalizuj co sie dzieje ze zmienna w, kiedy ta jest rowna 1.
Polecam popatrzec tez na rady osob wyzej :wink:

Witam. Mam podobny problem z tym zadaniem. Starałem się przetestować na wielu liczbach i wydaję mi się że wyniki są poprawne, jednak kod jest uznawany za błędną odpowiedź. Będę wdzięczny jeśli ktoś mógłby naprowadzić.
(link usunięty)

Eeeech… :slight_smile: Błąd, który popełniłeś jest zdarza się dość często na początku pracy ze SPOJEM. Bardzo prosty błąd. Wskazówka
-przeczytaj dokładnie treść zadania
-wykonaj kod dla danych testowych
-DOKŁADNIE porównaj wyniki Twoje i autora zadania

To się zdarza.
Po pierwsze dokładnie czytać treść zadania :slight_smile:
A teraz usuń link do rozwiązania, żeby nie stanowiło pokusy dla tych, którzy chcą chodzić na skróty…

1 month later

#include
#include
using namespace std;

int testy;

int szukanie(int m)
{

for(int n=2;n*n<=m;n++)
    if(m%n==0)

return false;

}

int main()
{

cin>>testy;

int liczby[testy];

for(int i = 0;i<=testy-1;i++)
{
    cin>>liczby[i];
}

for(int i = 0;i<=testy-1;i++)
{
    int m = liczby[i];

    if (liczby[i]!= 0 && liczby[i]%1 == 0 && liczby[i]%liczby[i] == 0 && szukanie(m)!= false && liczby[i]!= 1 && liczby[i]>0)
        cout<<"Tak"<<endl;
    else if(liczby[i] ==2)
        cout<<"Tak"<<endl;
    else
        cout<<"Nie"<<endl;
}



return 0;

}

Hejka, może mi ktoś powiedzieć dlaczego SPOJ uważa ten kod za błędny?

Co się dziwić, że SPOJ uznaje go za błędny skoro dla każdej wpisanej liczby wynik brzmi “Nie”. Jak poprawisz swój kod przeczytaj co napisałem dwie wypowiedzi wcześniej.
Pomijając kwestie merytoryczne to:

  1. Po co sprawdzasz czy liczba jest różna od 0 skoro w specyfikacji wejścia jest, że na wejściu będą liczby od 1 wzwyż.
  2. Jaki sens ma sprawdzanie czy reszta z dzielenia przez 1 wynosi 0???
  3. Po co używasz raz liczba[i] a raz m skoro to jedno i to samo? Chyba tylko po to by zaciemnić obraz.
  4. Dodam jeszcze nieczytelnie wklejony kod. Dlaczego nie podałeś go jako link do ideone? Tak jest najwygodniej.

Hej, dziękuję za porady, ale dalej mam jeden problem. Uprościłem trochę mój kod i kiedy uruchamiam go u siebie w konsoli działa on jak należy ( odpowiada “tak” na liczby pierwsze), spoj dalej go nie przyjmuje.

oto kod do ideone:

I może jeszcze Jeśli zaczynasz, przeczytaj koniecznie!

Czasami wystarczy napisać [na kolanie?] kod i od razu zadziała. Najczęściej jednak trzeba go jeszcze testować, a szczególnie, gdy dostajesz WA [błędna odpowiedź].

PS
Gdy autor zadania oczekuje TAK/NIE, to Tak/Nie jest poważnym błędem.

Jeden return false to za mało. Return domyślny nie jest określony, więc potrzebujesz jeszcze return true.

Dziękuje za radę, i miałeś rację. Gdy zamieniłem tak/nie na TAK/NIE mój kod został przyjęty :smiley:

Hejka, mógłby mi ktoś podpowiedzieć, dlaczego mi to odrzuca?
Z góry dziękuję (:slight_smile:

Bo …
Linia nr 7 jest bez sensu - Wiesz jak jest sprawdzana poprawność twojego rozwiązania?
Linia 9 jest bez sensu. A co się stanie, gdy nigdy nie pojawią się liczby <= 0 lub >= 100000, [bo się nie pojawią!!]?
Linie 10 i 12 są bez sensu. Znasz tylko tyle liczb pierwszych? A 11, a 13 a 17 itd
Wg Ciebie [twojego programu] 121, 169, 289 … sa liczbami pierwszymi, a przecież nie są

121 = 11 * 11, 169 = 13 * 13 oraz 289 = 17 * 17 itd.

Poczytaj o sprawdzxaniu pierwszości w dowolnym źródle wiedzy.

A na początek proponuję Ci, zrób te 3 proste zadania ::
https://pl.spoj.com/problems/PTEST/10,
https://pl.spoj.com/problems/RNO_DOD/6,
https://pl.spoj.com/problems/POTSAM/4,

AD linia 9 - pętla nigdy się nie skończy a w efekcie błąd SIGXFSZ

10 months later

Sędzia SPOJ to automatyczna sprawdzarka. Nie potrzebuje żadnych komunikatów zachęcających to wpisania wejścia - wyjście musi być dokładnie takie, jak sprecyzowano