2009-06-26 21 views
18

Nadal jestem studentem i uważam projekt Euler za bardzo zabawny.Najlepsza biblioteka brajta do rozwiązywania problemów z projektem Eulera w C++?

Czasami pytanie wymaga obliczeń większych niż typy pierwotne. Wiem, że można go wdrożyć, ale jestem zbyt leniwy, aby to zrobić,

Więc próbowałem kilka bibliotek,

MAPM :: bardzo dobrą wydajność, ale stanowi tylko duże pływaki, z możliwością sprawdzenia, czy jej jest liczbą całkowitą. bardzo dobry do zaakceptowania danych wejściowych, ale nieprzyjemny do dostarczania danych wyjściowych i kompiluje się jak magia przy użyciu ekspresowego programu Visual C++ 2008.

bigint :: mały, ale wymaga re inżynierii w wielu częściach. Bardzo prosta w użyciu, ale bardzo ograniczona moc i bardzo powolna w porównaniu do innych. tylko duże liczby całkowite.

ttmath :: Najpiękniejsza, którą próbowałem do tej pory !, tylko niektóre pliki do uwzględnienia i masz niewiarygodną moc/prostotę. Kompiluje się jak magia w Expressie Visual C++ 2008. Jest szybki, ponieważ zapewnia stałe numery. Jest zbudowany przy użyciu Metaprogramming w C++. Jedyną wadą widzę, że liczby nie są arbitralne długości w czasie wykonywania, ale można mieć 1024k numerów podczas pisania kodu bardzo łatwo,

ttmath::UInt<1024 * 1024> reallyHugeUnsignedInteger; 

zapewnia on trzy typy: podpisane i niepodpisane pływaka.

Próbowałem skompilować gmp pod Express VC2008, ale mi się nie udało! Wiem, że jest najlepszy, ale nie jest to łatwe do skompilowania dla początkującego w ramach ekspresu VC2008, doceniam także, jeśli wskażesz samouczek do kompilacji gmp pod VC.

EDIT :: Jeśli wiesz jak skompilować GMP przy użyciu VC 2008, proszę mi wyjaśnić i dostać nagrodę :)

EITD :: Wydaje się, że nie stosując odpowiednie warunki, więc o to magiczny GMP dla Windows! współpracuje z VC 2008 :)MPIR

+5

Uwaga: Do rozwiązania niektórych problemów może być potrzebna biblioteka bignum, ale większość problemów z Eulerem tak naprawdę jej nie potrzebuje. Kiedy musisz znaleźć jakąś własność bardzo dużej liczby, zwykle jest to bardzo nieefektywne, aby naprawdę obliczyć ją w celu znalezienia nieruchomości. Często trzeba przeanalizować problem i znaleźć lepsze rozwiązanie. Na przykład, jeśli potrzebujesz znaleźć liczbę zer w 1000 !, obliczając rzeczywistą wartość 1000! byłoby bardzo nieskuteczne rozwiązanie. –

+0

Dobrze, ale nie zawsze mam optymalne rozwiązanie :) – AraK

+4

@Igor: jeśli nieefektywne rozwiązanie działa w ciągu sekundy i zajmuje kilka minut, to nie jestem zainteresowany tym wydajnym.Tak, zrobiłem kilka pytań Eulera, i tak, były sytuacje, w których rzucanie GMP na problem rozwiązało go natychmiast. 1000! jest mniej niż 10 000 cyfr binarnych, prawdopodobnie jest to dość trywialne do obliczenia na komputerze. Z pewnością jest to szybsze niż obliczenie liczby końcowych zer w 1000! ręcznie (choć przyznane, to też nie jest takie trudne). –

Odpowiedz

1

GMP. Proste API, już od zawsze.

Edytuj: Och, próbowałeś tego. Naprawdę spróbuję jeszcze raz, jest najlepszy.

+1

Jak już powiedziałem, nigdy nie dostałem go pod VC :( – AraK

+0

sugestia: dla dobra innych czytelników SO, następnym razem dodaj linki. Robię to teraz dla ciebie. – jwfearn