Liczby pierwsze z przedzialu

0

Czesc,
Zadanie w c#: Napisz kod, który wyznaczy ilość liczb pierwszych w zadanym przedziale <a,b>.
Mój kod:

using System;

namespace LiczbyPierwsze
{

    internal class Program
    {
        static void Main(string[] args)
        {
            int n; 
            Console.WriteLine("Podaj ostatnia liczbę");
            n = int.Parse(Console.ReadLine()); 
            bool[] spr = new bool[n + 1]; 
            for (int i = 2; i <= n; i++)
            {
                spr[i] = true; 
            }
            for (int i = 2; i <=n; i++)
            {
                if(spr[i]) 
                {
                    for (int j = i*2; j <= n; j+=1) 
                    {
                        spr[j] = false;
                    }
                }
            }
            Console.WriteLine("Liczby pierwsze w zadanym przedziale:");
            for (int i = 0; i <= n; i++)
            {
                if (spr[i]) 
                {
                    Console.WriteLine(i + "");
                }
            }
            Console.ReadKey();
        }
    }
}

Co tu jest nie tak, dlaczego nie działa poprawnie?

2

Nie powinno być j += i zamiast j += 1?

0
Patryk27 napisał(a):

Nie powinno być j += i zamiast j += 1?

Rzeczywiście, ale nadal cokolwiek nie wpiszę to wypisuje 2 i 3

0

Tzn.?

2 i 3 to przecież liczby pierwsze.

1
Gabriela Czarnowicz napisał(a):

co robi ta pętla i dlaczego?

                for (int j = i*2; j <= n; j+=1) 
                {
                    spr[j] = false;
                }
0

tak, ale kolejne liczby po 2 i 3 nie są wypisywane

Patryk27 napisał(a):

Tzn.?

2 i 3 to przecież liczby pierwsze.

0
Miang napisał(a):
Gabriela Czarnowicz napisał(a):

co robi ta pętla i dlaczego?

                for (int j = i*2; j <= n; j+=1) 
                {
                    spr[j] = false;
                }

W tej pętli zmieniam wartości wielokrotnosci elementu tablicy na false

0

tak, ale kolejne liczby po 2 i 3 nie są wypisywane

Nieprawda 👀 (https://ideone.com/9Wf3Fd).

0

mi w visual studio wyświetla tylko te dwie, nie wiem gdzie jest problem

0

Hmm, a pokaż screenshota konsoli razem z kodem.

0

Przejedź debugerem po kodzie (F5/F10/F11) i wszystko będziesz widziała.

0

Dziwne to jest. Faktycznie sprawdziłem w VS i pokazuje tylko 2 i 3, a to dlatego, że robisz wszystkim innym false w drugiej pętli, która nie wiem po co jest... Czyli

PIERWSZA PĘTLA - ustawia wszystkim true oprócz 0 i 1 - zakładając, że wprowadzamy cyfrę 50 to od 2 do 50 jest true
DRUGA PĘTLA - ustawia wszystkim false, zaczynając od i * 2.

Czy ty przypadkiem tego i * 2 niepowinnaś mieć gdzieś indziej? Robiąc j = i * 2 mówisz pętli, że ma zaczynać od 4, ale później już lecisz pokolei, dlatego zwraca ci tylko 2 i 3.

1 użytkowników online, w tym zalogowanych: 0, gości: 1