• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Program sprawdzający czy liczba jest pierwsza

Object Storage Arubacloud
+1 głos
394 wizyt
pytanie zadane 18 października 2021 w C i C++ przez MKolaj15 Bywalec (2,270 p.)
zamknięte 19 października 2021 przez MKolaj15

WItam, mam za zadanie, napisanie programu, który sprawdzi, czy podana liczba jest pierwsza oraz wyświetli informację ile razy wykonała się pętla podczas sprawdzenia tego warunku. Wydaje mi się, że mój kod działa poprawnie, lecz problem jest w tym, że kiedy podamy liczbę mniejszą od 5, program się nie wykonuje. Może ktoś pomóc mi to naprawić? Z góry dzięki! Oto mój kod:

#include <iostream>
#include <string>

auto main(int argc, char* argv[]) -> int
{
    auto liczba = std::stoi(argv[1]);

    if (argc > 2) {
        std::cout << "Enter one number!"
                  << "\n";
    } else {

        for (int i = 2; i * i < liczba; i++) {
            if (liczba % i == 0) {
                    std::cout << "nie jest pierwsza!"
                              << "\n";
                    std::cout << "petla wykonala sie " << i << " razy"
                              << std::endl;
                break;  
                } 
            else{
              std::cout << "jest pierwsza!"
                              << "\n";
               std::cout << "petla wykonala sie " << i << " razy"
                              << std::endl;
            break;
                }    
            }

        }

    return 0;
}

 

komentarz zamknięcia: uzyskałem odpowiedź

1 odpowiedź

0 głosów
odpowiedź 18 października 2021 przez toko Dyskutant (7,670 p.)
wybrane 19 października 2021 przez MKolaj15
 
Najlepsza

Masz błąd, dla 9 pokazuje, że jest pierwsza. To, że jest pierwsza, możesz stwierdzić dopiero po przejściu całej pętli, gdy nie znalazła dzielnika. (W pierwszym przejściu pętli stwierdzasz, że 9 nie dzieli się przez 2(pierwsza wartość i), więc jest liczbą pierwszą, co jest nieprawdą)

Kolejny błąd to wypisywanie ile razy wykonała się pętla. Wypisujesz o jeden za dużo razy.

A nie działa dla liczb mniejszych od 5 4 ponieważ najmniejsza możliwa zmiennej i jest równa 2, i warunek w forze jest wtedy niespełniony (2*2 <= coś_mniejsze_od_54 jest nieprawdziwe). Ponieważ są to tylko 3 2 liczby (2, 3, 4) możesz zrobić dla nich wyjątek.

Znalazłem jeszcze jeden błąd warunek w forze powinien być i*i < = liczba, bo co w przypadku gdy liczba/i = i r.0

        int i;
        for (i = 2; i * i <= liczba; i++) {
            if (liczba % i == 0) {
                    std::cout << "nie jest pierwsza!"
                              << "\n";
                    std::cout << "petla wykonala sie " << i-1 << " razy"
                              << std::endl;
                    return 0;
                }    
            }
              std::cout << "jest pierwsza!"
                              << "\n";
               std::cout << "petla wykonala sie " << i-2 << " razy"
                              << std::endl;
komentarz 18 października 2021 przez MKolaj15 Bywalec (2,270 p.)

Okej, tylko nie wiem, czy coś źle przepisałem, ale nadal np. dla 9 wyświetla się, że jest pierwsza.

#include <iostream>
#include <string>

auto main(int argc, char* argv[]) -> int
{
    auto liczba = std::stoi(argv[1]);

    if (argc > 2) {
        std::cout << "Enter one number!"
                  << "\n";
    } else {
        int i;
        for (i = 2; i * i < liczba; i++) {
                if (liczba % i == 0) {
                std::cout << "nie jest pierwsza!"
                      << "\n";
                 std::cout << "petla wykonala sie " << i-1 << " razy"
                      << std::endl;
                 return 0;
                }    
        }       
        std::cout << "jest pierwsza!"
                      << "\n";
         std::cout << "petla wykonala sie " << i-1 << " razy"
                      << std::endl;     

    }

    return 0;
}

 

komentarz 18 października 2021 przez toko Dyskutant (7,670 p.)

i * i <= liczba w warunku w forze

komentarz 19 października 2021 przez MKolaj15 Bywalec (2,270 p.)
Super, działa! Dzięki wielkie za pomoc!

Podobne pytania

0 głosów
2 odpowiedzi 276 wizyt
0 głosów
1 odpowiedź 1,195 wizyt
0 głosów
1 odpowiedź 701 wizyt

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

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

...