189 / 277
Apr 2019

Algorytm jest OK - chociaż są dużo lepsze sposoby na zaliczenie tego zadania (np. badanie dzielników n do sqrt(n) albo sito Eratostenesa). Nie wiem jak piszesz cudzysłowy ale coś robisz nie tak. Na klawiaturze musisz klawisz na prawo od średnika wcisnąć razem z Shiftem. Ponadto nie zastosowałeś się do rady eksekk - słowa TAK i NIE muszą być napisane wielkimi literami. Po poprawieniu tych 2 rzeczy dostałem AC Twoim kodem. A i jeszcze porada praktyczna - kody udostępniaj jako link do ideone.com7.

Powodzenia

Podejrzewam, że forum automatycznie zmienia cudzysłowy po bezpośrednim wklejeniu kodu.

Dzięki. Dzisiaj, nie licząc poprawienia na duże litery(co zrobiłem zresztą wcześniej) zaliczyło.

8 days later

Cześć.

Czy ktoś podpowie co złego jest w tym kodzie ?

Nie dostaje akceptacji.

Odpowiedź dla każdej liczby musisz podawać w nowej linii

Dodam jeszcze, że dzielenie nie trzeba wykonywać do n-1 tylko do pierwiastka z n. Na sam wynik to nie wpłynie, ale wpłynie na czas wykonania. Po wpisywaniu wyniku do nowej linii spoje akceptuje kod. Gdy już będzie działało usuń link do kodu.

Cześć,
mam problem i cały czas otrzymuję błąd kompilacji. Piszę w C#, w Visual Studio
Co robię źle?

Nie możesz definiować funkcji wewnątrz innej funkcji. Przesuń ją poza main.

Wyrzuciłem boola poza main, do tego poprawiłem pętlę for i błąd, przez który 0 i 1 były uznawane za liczby pierwsze.
Jednak dalej nie przyjmuje, tym razem jest to błędna odpowiedź.

a czy zdarza ci się testować program, choćby czasami ?
bo warto :slight_smile: - choćby dla danych podanych w zadaniu

Tak, zawszę testuję. W visual studio program bez problemu działa i wyświetla poprawnie tak dla liczb pierwszych i nie dla liczb niebędących pierwszymi. Natomiast tutaj za każdym razem występuje problem

nie rozumiesz treści zadania i nie rozumiesz, co piszę
czy naprawdę dla danych testowych z zadania masz taki wynik, jak podano ?
a generalnie, to należy testować w środowisku podobnym do tego, w jakim działa spoj - czyli na ideone.com, a jeżeli już na vs, to z przekierowanym wejściem/wyjściem

@general_iceman przeczytaj jeszcze raz treść zadania:

Input
n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1…10000]

Teraz przyjrzyj się przykładowemu wejściu i SPRAWDŹ swoje wyniki

Input:
3
11
1
4
Output:
TAK
NIE
NIE

Poza tym w funkcji Pierwsza(x) powinieneś rozpatrywać przypadek 0 i 1. W funkcji Main będziesz mógłbyś uprościć kod do takiej konstrukcji:

if (Pierwsza(x)) {...}
else {...}

Dziękuję za pomoc, rzeczywiście źle odniosłem się do treści, po poprawieniu zaliczyło. Dodatkowo zrobiłem porządek w kodzie zostawiając w main jedynie pobieranie liczb do sprawdzenia i wyświetlanie, a całość sprawdzania przeniosłem do bool

Witam, jestem nowym użytkownikiem i świeżym “programistą”. Uczę się Javy od kliku dni Mam problem z tym zadaniem. W domu wszystko hula jak należy, ale na serwerze wyrzuca błąd NZEC. Czy ktoś wie gdzie mam błąd? Mój kod wygląda tak:

import java.util.;
import java.lang.
;

class Main
{
public static void main (String[] args) throws java.lang.Exception
{
Scanner scanner = new Scanner(System.in);

    for(int i = 0; i < 100000; i++){
    System.out.println("Podaj liczbę:");
    int liczba = scanner.nextInt();
    int k = 0;
    
    for(int j = 1; j < liczba; j++)
    if(liczba%j == 0)
    k++;
    
    if(k>1)
    System.out.println("NIE");
    else
    System.out.println("TAK");
    }
}

}

Przeczytaj uważnie treść zadania. JEDYNE co masz wypisywać to: TAK lub NIE. Poza tym…

  1. Nie znam jawy ale nie widzę wczytywanie liczby testów.
  2. Nie ma potrzeby dzielenia modulo aż do liczba-1. W zupełności wystarczy do pierwiastka z liczby

Moje wskazówki:

  1. Niepotrzebnie wypisujesz "Podaj liczbę: ". Kod sprawdzany jest automatycznie i musisz dostosować się do
    formatu we/wy opisanego w zadaniu, bo inaczej dostaniesz WA.
  2. Nie wczytujesz liczby określającej liczbę przypadków testowych - musisz ją wczytać a potem uruchomić pętlę dla
    testów. Ty wykonujesz tę pętlę zawsze 100000 razy.
  3. Wystarczy sprawdzać dzielniki od 2 do pierwiastka z n. (int j = 2; j*j <= n; j++). Gdy tylko znajdziesz dzielnik możesz
    opuścić tę pętlę, bo liczba będzie złożona.
  4. Musisz rozważyć sytuację gdy liczba to 0 lub 1 - bo to nie są liczby pierwsze.

Powyższe wskazówki pozwolą Ci na uzyskanie AC. A oto bardziej ogólne porady:

  1. Najoptymalniejszym sposobem na to zadanie jest sito Erastotenesa - jak już pouczysz się trochę to proponuję
    powrócić do tego zadania i zaliczyć je tym algorytmem.
  2. Swój kod przekazuj w formie linku do ideone.com1. Możesz tam wklejać input i testować swój kod.
    Staraj się też poprawić czytelność kodu.
  3. Java ma bardzo wolne I/O. Są dużo lepsze sposoby organizacji I/O - poszukaj na przyszłość.
  4. To zadanie wcale nie jest najłatwiejsze z kategorii łatwych. Poniżej masz linki do kilku bardzo prostych, żebyś mógł
    się oswoić:
    https://pl.spoj.com/problems/PTEST/6
    https://pl.spoj.com/problems/POTSAM/4
    https://pl.spoj.com/problems/MWPZ06X/3
    https://pl.spoj.com/problems/VSR/4