szukanie liczb pierwszych

0
  1. Stwórz funkcję
    int[] ZwrocTablice(int[] T)
    , która zwraca tablicę takich liczb z tablicy T, które są pierwsze. Liczby w zwracanej tablicy muszą być w uporządkowane kolejności ich występowania w tablicy T. Rozmiar tablicy zwracanej musi być zgodny z liczbą wystąpień liczb pierwszych.

Wychodzi mi system int32.
Ma ktoś pomysł jak prościej zrobić to zadanie?

static int czyPierwsza(int a)
        {
            if (a>=2)
            {
                for (int i = 2; i < a; i++)
                {
                    if (a % i == 0)
                    {
                        return 0;
                    }
                }
                return 1;
            }
            return 0;
        }
        static int[] ZwrocTablice(int[] T)
        {
            int[] a = new int[T.Length];
            for (int i = 0; i < T.Length; i++)
            {
                if (czyPierwsza(T[i]) == 1)
                {
                    a[i] = T[i];
                }

            }
            int b = 0;
            
            int[] tablica = new int[a.Length];
            do
            {
               tablica[b] = a[b];
                
                b++;
            } while (b<a.Length);
            return tablica ;

        }
        static void Main(string[] args)
        {
            int x = 0;
            int[] T = { 1, 2, 3, 4, 5 };

            Console.WriteLine(ZwrocTablice(T));
            Console.ReadKey();
            
        }

**pozdrawiam **

0

Pobierz, tą CSV'e, https://raw.githubusercontent.com/koorukuroo/Prime-Number-List/master/primes.csv dodaj do programu, następnie dodaj kod który sprawnie będzie ją odczytywał, z dysku. żeby nie otwierać, pliku cały czas, część wyników trzymaj tablicy/tablicach tymczasowych. Możesz też zoptymalizować wyszukiwanie w pliku, empirycznie estymując, gdzie liczba powinna być, a następnie ręcznie przesuwać pozycje w streamie.
Potem oddaj do sprawdzenia, gdyby padł argument "a co jeśli chciałbym mieć liczbę której nie ma na liście", to powiedz że nikt z nas nie miałby cierpliwości szukać jej standardowym algorytmem, wiec praktycznie to pytanie nie ma tu zastosowania. :) jak przejdzie wykładowca będzie zbierał szczękę z podłogi, co jest wartę tej godziny roboty :D

1
Adam Mąka napisał(a):

Wychodzi mi system int32.

Winna jest ta linijka: Console.WriteLine(ZwrocTablice(T)); Nie tak się wyświetla elementy tablicy - musisz użyć pętli, aby wyświetlić je po kolei.

Ma ktoś pomysł jak prościej zrobić to zadanie?

Jeśli chcesz robić algorytmem naiwnym, to pamiętaj, że:

  • liczby <= 1 nie są pierwsze;
  • 2 i 3 są;
  • jeśli dzieli się przez 2 lub 3 to nie jest pierwsza (dlatego nie ma sensu sprawdzać podzielności przez każdą parzystą ani każdą wielokrotność trójki);
  • wystarczy sprawdzać do sqrt(a), bo jeśli nie podzieli się do pierwiastka kwadratowego z testowanej liczby, to później już na pewno też nie.

Dzięki temu wszystkiemu w pętli możesz iterować od 5 co 6, w każdym kroku sprawdzając podzielność przez i oraz i+2 znacznie redukując liczbę przebiegów pętli.

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