Problem ze zliczaniem kroków

0

Mam problem z licznikiem kroków pętli z metody IsPrime. Chcę zliczać kroki, jednak ta wartość nie jest przekazywana do metody Main.

using System;
using System.Diagnostics;

namespace Prime_Numbers
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch czas = new Stopwatch();
            Int64 licznikKrokow = 0;

            int i, j, zakres, dokad;
            int[] tablica = new int[10000];
            //Console.WriteLine("Podaj gorny zakres, do ktorego chcesz odnalezc liczby pierwsze");
            //zakres = int.Parse(Console.ReadLine());
            zakres = 103;
            dokad = (int)Math.Floor(Math.Sqrt(zakres));

            //inicjowanie tablicy
            for (i = 1; i <= zakres; i++) tablica[i] = i;

            //algorytm - sito eratostenesa
            for (i = 2; i <= Math.Sqrt(dokad); i++)
            {
                if (tablica[i] != 0)
                {
                    j = i + i;
                    while (j <= zakres)
                    {
                        tablica[j] = 0;
                        j += i;
                    }
                }
            }

            //wypisywanie wyniku
            Console.WriteLine("Liczby pierwsze z zakresu od 1 do " + zakres);
            for (i = 2; i <= zakres; i++)
                if (tablica[i] != 0)
                    Console.WriteLine(i);

            czas.Start();
            bool wynik = IsPrime(103, ref licznikKrokow, tablica);
            czas.Stop();

            if (wynik)
            {
                Console.WriteLine("jest. Liczba kroków: " + licznikKrokow);
                Console.WriteLine("czas: " + czas.Elapsed);
            }
            else
                Console.WriteLine("nie jest");
        }

        static bool IsPrime(Int64 Num, ref Int64 licznikKrokow, int[] tablica)
        {
            licznikKrokow = 1;

            if (Num < 2) return false;
            else if (Num < 4) return true;
            else if (Num % 2 == 0) return false;
            else
                for (int u = 3; u < tablica[u]; u += 1)
                {
                    licznikKrokow++;
                    if (Num % u == 0) return false;
                }
            return true;
        }

    }
}
1

Zwróć uwagę ten zapis:

    for (int u = 3; u < tablica[u]; u += 1)
0
for (int u = 0; u < tablica[u]; u += 1)

Dzięki za wyłapanie błędu. Wydaje mi się że problem leży z przekazywaniem wartości zmiennej licznikKrokow do Maina

0

Nie, problem leży dokladnie w tej linijce ktorą wspomnial @rajszym.

for (int u = 3; u < tablica[u]; u += 1)

u jest równe 3, tablica[3] jest równe 3, wiec to co jest w tej pętli for nie wykona się ani razu.

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