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

Liczy pierwsze i ich kolejność.

VPS Starter Arubacloud
0 głosów
240 wizyt
pytanie zadane 19 września 2018 w C# przez MS Początkujący (430 p.)

Za zadanie mam znaleźć liczbę pierwsza, która jest np. 60 z kolei. tak jak 11 jest piątą z kolei. Napisałem kod, który pozwala znaleźć liczby pierwsze z danego przedziału, ale nie wiem jak połączyć ich wartość z kolejnością. Proszę o pomoc.

  • bool isPrime = true;
                int num;
                num = Convert.ToInt32(Console.ReadLine());
                for(int i = 2; i <= num; i++)
                {
                    for(int j = 2; j < i; j++)
                    {
                        if((i != j) && (i % j == 0))
                        {
                            isPrime = false;
                        }
                    }
                    if(isPrime)
                    {
                        Console.WriteLine(i);
                    }
                    isPrime = true;

     

3 odpowiedzi

+1 głos
odpowiedź 3 października 2018 przez GironX Początkujący (360 p.)
edycja 3 października 2018 przez GironX

Wydaje mi się, że najlepszym rozwiązaniem będzie zapisywanie kolejnych liczb pierwszych do Listy ( List<> ), a następnie wyświetlenie 60 elementu listy.
Zamiast 

int num;
            num = Convert.ToInt32(Console.ReadLine());

mam wrażenie , że wygodniej będzie:

var num = int.Parse(Console.ReadLine());


Brakuje sprawdzenia czy taki element w przedziale istnieje. Przedział może mieć 59 elementów, a program i tak się wykona.  Niestety w List<> to nie takie proste. Można obsłużyć wyjątek w przypadku przekroczenia zasięgu listy, ale to będzie ominięcie problemu, a nie jego rozwiązanie.

Próbuj używać znaczących nazw zmiennych np. checkedNumber, primeNumber.

Liczbę pierwszą sprawdzisz w ten sposób:

bool isPrimeNumber(int checkedNumber)
            {
                if (checkedNumber < 2)
                    return false; //gdy liczba jest mniejsza niż 2 to nie jest pierwszą

                for (int i = 2; i * i <= checkedNumber; i++)
                    if (checkedNumber % i == 0)
                        return false; //gdy znajdziemy dzielnik, to dana liczba nie jest pierwsza
                return true;
            }

 

 

0 głosów
odpowiedź 19 września 2018 przez Snejki Stary wyjadacz (14,520 p.)
Najprościej to po prostu zrób sobie dodatkową zmienną którą będziesz inkrementował w pętli wraz ze znalezieniem każdej kolejnej liczby pierwszej. Następnie wystarczy dodać odpowiedni warunek w pętli(tam gdzie sprawdzasz czy liczba jest liczbą pierwszą) i porównasz w niej czy liczba inkrementowana jest równa numerowi liczbie pierwszej.
komentarz 19 września 2018 przez MS Początkujący (430 p.)
Coś na podobieństwo tego co kolega niżej napisał?
komentarz 19 września 2018 przez Snejki Stary wyjadacz (14,520 p.)
tak
komentarz 19 września 2018 przez MS Początkujący (430 p.)
W takim razie gdzie jest blad w moim kodzie skoro nie otrzymuje żadnego wyniku?
0 głosów
odpowiedź 19 września 2018 przez niezalogowany

Może coś takiego:

if(isPrime) {
    Prime++;
    if(Prime == 60)
        Console.WriteLine(i);
}

 

komentarz 19 września 2018 przez MS Początkujący (430 p.)
Nic nie wyświetla.
komentarz 19 września 2018 przez niezalogowany
A jak dasz zamiast 60 mniejszą liczbę?
komentarz 19 września 2018 przez MS Początkujący (430 p.)
Wpisuje num, czyli dowolną liczbę wcześniej wybraną.

Podobne pytania

0 głosów
2 odpowiedzi 620 wizyt
pytanie zadane 25 lipca 2018 w C# przez Piotr86PL Początkujący (340 p.)
0 głosów
6 odpowiedzi 7,651 wizyt
pytanie zadane 22 lutego 2016 w C# przez Qkiz Nowicjusz (200 p.)
0 głosów
1 odpowiedź 1,297 wizyt

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...