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

C# - Wypisywanie liczb pierwszych z danego przedziału

Object Storage Arubacloud
0 głosów
5,786 wizyt
pytanie zadane 3 listopada 2018 w C# przez aXen Początkujący (390 p.)

Mam zadanie: "Wczytaj liczbę naturalną n>1 i wypisz wszystkie liczby pierwsze z przedziału [1,n]."
No i mam też program na liczby pierwsze:

using System;

namespace _5._7
{
    class Program
    {
        static void Main(string[] args)
        {
            int n, i;
            Console.Write("Wpisz n: ");
            n = Convert.ToInt32(Console.ReadLine());
            for (i = 2; i <= n; i++)
            {
                Console.WriteLine("{0}", i); // To jest do sprawdzenia, którą liczbę zapętla
                if (n % i == 0)
                {
                    if (i == n)
                    {
                        Console.WriteLine("{0} - Jest liczbą pierwszą!", i);
                        Console.ReadKey();
                    }
                    else
                    {
                        Console.WriteLine("{0} - Nie jest liczbą pierwszą!", i);
                        Console.ReadKey();
                    }
                }
            }
            Console.ReadKey();
        }
    }
}

Program pokazuje prawidłowo wynik, lecz wypisuje się nie ta liczba.
Nie mam pomysłu też na pokazanie od 1 do n tych liczb pierwszych.

1 odpowiedź

+1 głos
odpowiedź 3 listopada 2018 przez Velta Maniak (52,010 p.)

Twój algorytm jest błędny i dość dziwnie działa. ;p

Wydziel sobie sprawdzanie, czy liczba jest pierwsza do osobnej funkcji:

private static bool IsPrime(int n)
{
	// do the magic things!
}

Potem możesz łatwo sprawdzić bez robienia zamieszania w funkcji głównej:

if(IsPrime(i)) Console.WriteLine("{0} jest liczbą pierwszą.", i);

Pamiętaj, że liczba pierwsza to taka, która jest większa od 1 i dzieli się tylko przez liczbę jeden i przez samą siebie (tylko i wyłącznie 2 dzielniki). Za każdym razem musisz sprawdzić (np. wyżej zaproponowanym rozwiązaniem funkcją), czy po drodze od jedynki nie ma czasem liczby, która przy dzieleniu da resztę z dzielenia równą 0, co dyskwalifikuje liczbę z nazwania jej pierwszą.

Nie mam pomysłu też na pokazanie od 1 do n tych liczb pierwszych.

Zgodnie z teorią liczb, liczba pierwsza to liczba naturalna większa od 1. Jedynka nigdy nie będzie oznaczana jako liczba pierwsza, więc bardziej sensownie będzie sprawdzać od 2 do n.

A przy okazji: masz możliwość używania argumentów programu, a z nich nie korzystasz!

int n = Convert.ToInt32(args[0]);

Użytkownik nie musi oczekiwać na prośbę o wpisanie n, tylko wpisać liczbę przy wywoływaniu programu. smiley

Podobne pytania

0 głosów
0 odpowiedzi 3,508 wizyt
pytanie zadane 20 października 2016 w Java przez Lukasz95 Bywalec (2,160 p.)
0 głosów
1 odpowiedź 3,530 wizyt
+1 głos
2 odpowiedzi 11,542 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...