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

c# Program do znajdowania liczb pierwszych w zadanym przedziale

0 głosów
184 wizyt
pytanie zadane 12 stycznia w C# i .NET przez wojtek0802 Nowicjusz (170 p.)

Witam. Mam problem z tym zadaniem:

" Stwórz funkcję bool CzyIstnieje1(int a, int b) , która zwraca true, jeśli w przedziale obustronnie domkniętym [a;b] znajduje się liczba pierwsza. W przeciwnym wypadku funkcja zwraca false. "

Potrafię wykonać taki program, jeśli podany jest tylko górny zakres liczb, tak wygląda wtedy  funkcja:
 

 static bool CzyIstnieje1(int n)
        {
            bool[] spr = new bool[n + 1];

            for (int i = 2; i < spr.Length; i++)
            {
                spr[i] = true;
            }

           
           for (int i = 2; i < spr.Length; i++)
            {
                if (spr[i]==true)
                {
                    for (int j = i*2; j<= n; j = j+i)
                    {
                        spr[j] = false;
                    }
                }
            }

            for (int i = 0; i < spr.Length; i++)
            {
                if (spr[i])
                {
                    return true;
                }
            }

            return false;
       }

NIestety mam problem gdy dolna wartość przedziału jest większa od dwóch, nie wiem jakie wtedy podać warunki w pętli. Ktoś ma jakiś pomysł?

2 odpowiedzi

0 głosów
odpowiedź 12 stycznia przez Neeq Obywatel (1,440 p.)
"Stwórz funkcję bool CzyIstnieje1(int a, int b)" nie powinieneś podesłać do funkcji CzyIstnieje 2 wartości int pierwsza "a"- początek pętli, "b" koniec pętli ?
komentarz 12 stycznia przez wojtek0802 Nowicjusz (170 p.)

Tę funkcję podałem jako przykład podobnego programu, który potrafię zrobić :)

Z problemem o który pytałem też mi się udało poradzić w ten sposób:

static void Liczbypierwsze(int a, int b)
        {
            bool[] spr = new bool[b + 1];
            for (int i = 2; i < spr.Length; i++)
            {
                spr[i] = true;
            }

            for (int i = 0; i < spr.Length; i++)
            {
                if (spr[i])
                {
                    for (int j = i*2; j <=b; j = j+i)
                    {
                        spr[j] = false;
                    }
                }
            }

            for (int i = 0; i < spr.Length; i++)
            {
                if (spr[i])
                {
                    return true;
                }
            }
        }

Moje pytanie brzmi teraz: czy istnieje jakiś prostszy sposób tak, aby nie tworzyc tablicy, która ma niepotrzebnie dużo elementów?

0 głosów
odpowiedź 13 stycznia przez pulson666 Dyskutant (8,310 p.)
Zrób pętle które jako pierwszy warunek przyjmuje minimum i leci aż do naszego max np. For(int i = min; Mac >min; min+++)

Podobne pytania

0 głosów
1 odpowiedź 100 wizyt
0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 15 października 2017 w C i C++ przez Jolka Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 295 wizyt
pytanie zadane 7 listopada 2017 w C i C++ przez mn130496 Bywalec (2,060 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

53,174 zapytań

96,434 odpowiedzi

197,515 komentarzy

25,973 pasjonatów

Przeglądających: 243
Pasjonatów: 15 Gości: 228

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...