38 / 277
Sep 2016

Dla dwójki był błąd. Nie wiem jak mogłem to przeoczyć. Dziękuję i przepraszam za kłopot

9 days later

szkoda, że nie nie przeczytałeś tego wątku przed napisaniem swojego pytania :slight_smile:

77 ?

@esbe

Chciałbym wrócić do początku tego wątku,
Ktoś, z czytających, ma pomysł lub doświadczył działania programu poniżej 0.00 sek?

Dodam iż mi się udało w 0.15 sek.
Ciekawią mnie inne rozwiązania niż sam dokonałem w C++ (5.1).

Rozwiazanie zawarłem w pętli do...while, czyli wykonuj dzielenia badanej liczby przez "j" (gdzie j=2) nastepnie j++, aż do momentu gdy potęga kwadratowa z "j" bedzie wieksza od liczby badanej.
Jezeli wynik dzielenia będzie kiedykolwiek ==0 to "NIE"
Plus dodatkowy warunek dla "2".

poniżej 0.00 się nie da :slight_smile:

ale już poniżej 0.005 tak - prawidłowy algorytm + szybkie wczytywanie

sam prawidłowy algorytm daje czas 0.01 (operacje wejścia/wyjścia scanf()/printf(), a nie cin/cout)

8 days later
15 days later

Witam odnowie temat , wiem że wiele osób już o to pytało, ale zaptam i ja. Co robię źle z kodem, wydaje mi się poprawny sprawdziłem wszytkie warianty błedów z tego forum , a i tak sedzia ocenia mnie negatywnie... oto mój kod.

#include <iostream>

using namespace std;


int main()
{


int liczba;

    

    for(int n=0;n<1000000;n++)
    {
    cin>>liczba;
            
            if(liczba<2)
            {
                cout<<"NIE"<<endl;
            }
                
            else 
            {
                
                for (long int p=2; p<=liczba; p++)
                {
                    if(liczba==p)
                    {
                        cout<<"TAK"<<endl;break;
                    }
                    if(liczba%p==0)
                    {
                        cout<<"NIE"<<endl;break;
                    }
                
                    
                }
            
            }
    }
    
    
    
    
    return 0 ;
}

W takim razie, przeczytaj [uważnie] jeszcze raz albo aż do skutku, treść zadania - w końcu to tylko 3 zdania. Potem [dokładnie] przeanalizuj podany tam przykład, najlepiej metodą kartka i ołówek.

4 months later

Witam, możliwe że mam w kodzie problem, który już w tym wątku wystąpił, ale niestety nie mogę go znaleźć, będę bardzo wdzięczny za pomoc, starałem się dokładnie komentarzami opisać mój tok rozumowania (jbc kod w c++) :wink:
https://ideone.com/jS7Vb522

Taki test:

2
4
2

Niepotrzebnie skomplikowałeś sobie życie zmienną "pierwsza". Jeśli chcesz jej używać w ten sposób, to nie może mieć ona staniu nieokreślonego, tj. musi być inicjalizowana.
Dodatkowo w celach edukacyjnych możesz się zastanowić, skąd taka, a nie inna jej wartość przy drugim przebiegu pętli dla powyższego testu (czyli sprawdzaniu, czy 2 jest pierwsze).

TAK, masz!

Tok rozumowania jest całkowicie poprawny [ale możnaby go jeszcze "lekko podrasować" - czytaj przyśpieszyć - ale to już inna bajka]. Natomiast kod już nie jest dobry i nawet komentarze nic tu nie zmienią. W tym wypadku, pomagający mają w małym paluszku cały algorytm i najczęściej taki miejscami nadmiarowy miejscami błędny, miejscami za długi komentarz tylko zaciemniają [na mój gust] kod.

jbc, ideone po prawej stronie, na środku, małymi literami napisał to :wink:

Kiepsko szukałeś - czytaj testowałeś. Np zobacz:
https://ideone.com/uN4S9A38

Dzięki za pomoc, nie zauważyłem tego błędu dla liczby 2, gdy to zmieniłem zadziałało :wink:

Domyślam się, że kod jest słabej jakości, są to dopiero moje początki, sam fakt, że mam problem z takimi zadaniami to pokazuje :wink: Dzięki za porady, nad samym zapisem toku rozumowania muszę dużo pracować, bo jak na razie to jest wszystko chaotyczne i niespójne, ale mam nadzieję, że w miarę ćwiczeń będzie coraz czyściej i przejrzyściej.

Raczej za dobrze to te programy nie działają.

Sprawdź np:

6
1
2
3
21
22
33

Jest mnóstwo tematów dotyczących tego zadania, tam już powiedziano wszystko, co można :wink: .
Zdecyduj się na jedną wersję (moim zdaniem lepsza ta z dodatkową funkcją) i ją rozwijaj, aż zadziała. Algorytm, który próbujesz zaimplementować powinien być wystarczająco szybki, żeby dostać AC (chociaż ludzkości znane są szybsze :wink: ).

@shaggy1990
Druga wersja jest bardziej skopana, a pierwsza prawie dobra. Popraw tylko w pierwszej wersji odpowiedź dla liczby = 2.