229 / 277
Jan 2020

Prawie się zgadzam z @hipcia w całej rozciągłości i w prawie 100%, ale u mnie niechęć sięga 99,9%. Nigdy jeszcze nie widziałem takiego podejścia do tego zadania, więc może to dobrze? :wink: Jeżeli nie int i nie long long to zostają jeszcze do przetestowania float, double i long double. Tak naprawdę to wystarcza tu typ bool, ale jak nie wiesz jak to zrobić …

Mimo wszystko gratuluję samodzielności [z małą pomocą forum]. I moje rady:
Naucz się poprawnie wklejać kod lub korzystaj z ideone.com !!! No i może przeczytaj w końcu: Jeśli zaczynasz, przeczytaj koniecznie! <-- to jest link,w który musisz kliknąć.

@narbej Faktycznie zmiana na double to znakomity pomysł :slight_smile: Program zostanie zaliczony chociaż metoda mogłaby być szybsza z boolem.

Cóż, powiem nieskromnie, że wiem :wink:

Tzn, wiem, że zostanie zaliczony. Po prostu pisząc że zostały do przetestowania, równolegle przetestowałem te opcje w tym samym czasie [no może odrobinkę wcześniej], bo inaczej bym o nich nawet nie wspominał.
Bo pomysł nie jest znakomity, to tylko taka tam proteza czy obejście, wybrnięcie z problemu. Rozwiązań jest tu multum prostszych, ale okazuje się, że jest też i taki jak wyżej sposób i @dodename_1 będzie mógł się cieszyć kolejnym AC.

Hej! Rzeczywiście zmiana na double zadziałała!

Co do innych rozwiązań - to też podsunął mi kolega, ja miałem nieco inne, ale to mi się bardzo spodobało. Trwałem przy programie, ponieważ nie znam rozwiązań ze zmienną “bool”, a nie chciałem bezmyślnie kopiować innych schematów, tylko oprzeć się na szkielecie programu, do którego udało mi się samemu dotrzeć i poszukać pomocy u innych, bardziej doświadczonych użytkowników w tych miejscach, których nie rozumiałem.

Wszystkim bardzo dziękuję za pomoc! :slight_smile:

Gratulacje zaliczenia zadania, jednak myślę, że warto byś jednak spróbował rozwiązania z typem bool.
Zresztą nie musi to być typ bool, wystarczy typ int.
Podpowiedź:
int p = 0;

for(){

if(coś tutaj)
p=1;
}
if(p )

else

p=0;
To jest oczywiście tylko szkielet

Metoda z typem double chociaż tutaj przeszła, jest moim zdaniem takim rozwiązaniem zastępczym. Poza tym wydaje mi się, że mogłaby już niedobrze pracować dla większych liczb np. dla liczb bliskich 1000 000 000 podejrzewam, że będzie wykazywać, że nie ma tam liczb pierwszych.

3 months later

Hej, czy mógłby ktoś zerknąć na kod i podpowiedzieć co mógłbym poprawić aby został zatwierdzony. Generalnie wydaje mi się, że wszystko działa jak powinno ale jak widać coś jest jednak nie tak :smiley:

 int n = int.Parse(Console.ReadLine());
        if (n < 100000)
        {
            for (int j = 0; j < n; j++)
            {
                int a = int.Parse(Console.ReadLine());
                if (a > 0 && a <= 10000)
                {
                    for (int i = 0; i < 1; i++)
                    {
                        if ( a == 1 || a % 2 == 0 && a != 2 || a % 3 == 0 && a != 3) 
                        {
                            Console.WriteLine("NIE");
                        }
                        else
                        {
                            Console.WriteLine("TAK");
                        }
                    }
                }
            }
            Console.ReadKey();
        }

Wszystko działa jak należy? To pochwal się ile i jakie przypadki sprawdziłeś, najlepiej przez link do ideone. Np. co wychodzi Ci dla 25…

Wpisywałem randomowe liczby. Dla 25 faktycznie wychodzi zły wynik. Czyli jeszcze muszę popracować nad :
if ( a == 1 || a % 2 == 0 && a != 2 || a % 3 == 0 && a != 3)

Jest 25 liczb pierwszych, ktore sa mniejsze od 100.
Jesli uda sie zrobic w analogiczny sposob powyzszy warunek to bedzie wygladal imponujaco. :wink:

5 months later

Hej, sędzia pokazuje mi, że ten kod przerkacza limit czasu. Ma ktoś pomysł dlaczego tak jest? Kod w Pythonie

n = input()
j = 0
k=[]
for n in range(0,int(n)):
    i=0
    number = input()
    for nu in range(2,100000):
        if int(number) % nu == 0:
            i+=1
    if i != 1:
        k.append("NIE")
    else:
        k.append("TAK")
for num in k:
    print(num)

Hej, ciekawi mnie czemu zamiast zwykłego print(“TAK”) albo print(“NIE”) w if i != 1: ; else: dodajesz do listy i potem pętlą drukujesz listę?

Pytam bo dopiero uczę się Pythona i zwyczajnie nie rozumiem czy np. są z tego jakieś korzyści.

Program zrobi to samo ale nie wyświetli tego w wymagany sposób. Wyjdzie Ci np:
3
TAK
4
NIE
5
TAK

Tak jest tylko jeśli testujesz z konsoli, wtedy miesza się Twój input z outputem. Jak przekierujesz sobie stdout do pliku i uruchomisz program, zobaczysz wtedy w tym pliku to, co widzi spoj. Nie będzie tam tych liczb.

Dodatkowo, dla spoja jest bez znaczenia czy wypisujesz po kolei czy wszystko na raz, ale lepiej po kolei (zrobisz jeden test i od razu wypisz wynik), gdyż kod jest czytelniejszy.

Lub tylko przekierujesz stdin z pliku
lub przekierujesz i stdin i stdout z i do odpowiednich plików
lub użyjesz ideone z wypełnionym testem [danymi] okienkiem stdin
lub użyjesz innego rozwiązania, które robi to co powyżej
lub napiszesz sobie sam taki odpowiedni program robiący np to co ideone lub więcej

Dokładnie tak. Spoj “przekierowuje” “sobie” stdin z jednego i stdout do drugiego pliku, a nie wypisuje nic na konsoli więc “mu” się nie nie miesza.

3 months later

Witam

Będę bardzo wdzięczny za pomoc w oczywistej tutaj kwestii, tj. źle działającego kodu:

Dlaczego np. 9 wskazuje jako liczbę pierwszą? Czy coś namieszałem w pętli?

Twoja pętla sprawdzająca pierwszość zawsze się przerwie po pierwszej iteracji. Prześledź sobie uważnie działanie programu (np. z pomocą debuggera), sprawdzając zwłaszcza wyniki instrukcji warunkowych.

Zrobiłem coś takiego:

Jednak sędzia pokazuje przekroczony limit czasu.