2012-07-30 15 views
6

wiem, że jest jeden, który jest stosowany we wszelkiego rodzaju .NET słowników i hashtables w:Czy jest publicznie dostępny tabela liczb pierwszych w .NET

internal static class HashHelpers

  • Czy istnieje jeden publiczny także gdzie indziej?
  • Jeśli nie, dlaczego jest przechowywany w pamięci wewnętrznej, czy nie jest to coś bardzo powszechnie używanego?
  • Czy kopia & wkleja drogę do końca, jeśli potrzebuję liczb pierwszych w moim kodzie?
+2

"dlaczego jest przechowywany w pamięci wewnętrznej" - myślę, że mogą swobodnie zmieniać wewnętrzną implementację tych klas bez potrzeby utrzymywania jej w zgodności wstecznej. – Rup

+2

Liczby pierwsze pozostaną kompatybilne na zawsze Zgaduję: D –

+1

Prawidłowo, ale sygnatura metody może wymagać zmiany. – davenewza

Odpowiedz

5
  1. O ile mi wiadomo, nie ma publiczna wersja tej tabeli dostępne w .NET
  2. Ponieważ ta tabela nie jest tabelą wszystkich liczb w zakresie, lecz tabelę dowolnie wybrany podzbiór liczb pierwszych nadających się do określonego celu (rozmiary pojemników bazujących na hash)
  3. Nie, powinieneś albo wygenerować własny stół w locie, albo skopiować i wkleić tabelę z jednego z wielu źródeł kompletnych.
+0

2. Było dla mnie nowe - myślę, że wyjaśnia, dlaczego nie jest to publiczne. –

3

Nie mogę odpowiedzieć na twoje pytanie dotyczące dostępności HashHelpers, ale oto sposoby na jego wdrożenie.

Oto post z pewnych nadrzędnych implementacjach na generowanie liczb pierwszych: Most elegant way to generate prime numbers

Dodatkowo, można to zrobić w LINQ:

var odds = 
    from n in Enumerable.Range(0, int.MaxValue) 
    select 3 + (long) n * 2; 

var primes = (new[] { 2L }).Concat(
    from p in odds 
    where ! odds.TakeWhile(odd => odd * odd <= p).Any(odd => p % odd == 0) 
    select p); 

Źródło: http://jacobcarpenter.wordpress.com/2008/03/26/linq-to-prime-numbers/

Edit: Nie użyj wartości int.MaxValue w swoim początkowym zakresie. Ogranicz to do czegoś odpowiedniego.

+0

To jeden z najpiękniejszych fragmentów kodu do generowania liczb pierwszych, które widziałem, ale zdecydowanie nie jest to najbardziej wydajne. Wykonuje znacznie więcej testów, niż to konieczne. Lepszą alternatywą byłoby użycie tylko liczb pierwszych, które już znaleźliśmy jako dzielniki kandydatów. – dasblinkenlight

+0

Pytanie nie dotyczyło "jak generować liczby pierwsze w .net" - głównym punktem mojego pytania było ** posiadanie tabeli prekalkulowanych liczb pierwszych ** do użycia w algorytmach hasing, encyption itp. - w celu zaoszczędzenia czasu ich obliczenia. –

+2

@ achitaka-san - jeśli potrafisz generować liczby pierwsze, bardzo banalnie jest umieścić je w tablicy statycznej. Jeśli chcesz, możesz nawet zapisać je w pliku tekstowym [sformatowanym jako tablica C#] niż C & P w pliku kodu. MYŚL, CZŁOWIEK THINK – NPSF3000

Powiązane problemy