Jak pomnożyć dwie bardzo duże liczby większe niż 32 znaki, na przykład mnożenie 100! z 122! lub 22^122 z 11^200 przy pomocy dzielenia i podbijania, czy jakiekolwiek ciało ma kod java lub kod C#?Szybkie mnożenie bardzo dużych liczb całkowitych
Odpowiedz
Napisałem jeden, który używa Arrays, aby to osiągnąć, tylko dla zabawy. Sądzę, że klasa Java w języku BigInteger robi to samo.
Here to przykład w języku C#, który może ci się przydać.
Here's some integer multiplication algorithms
Here's a class library for numbers
Zawiera algorytmy Karatsuba i Schonhage-Strassen do mnożenia dużych liczb całkowitych.
Powinieneś prawdopodobnie używać java.math.BigInteger. Pozwala to na reprezentację wartości całkowitych znacznie przekraczających 2^32 lub nawet 2^64. Wartości BigInteger są zasadniczo ograniczone jedynie ilością pamięci dostępnej dla programu, tj. ~ 4 GB w systemie 32-bitowym i prawie dostępną fizyczną + wirtualną pamięcią dla systemów 64-bitowych.
import java.math.BigInteger;
class Foo
{
public static void main(String args[])
{
BigInteger bigInteger100Fact = bigFactorial(BigInteger("100")); //where bigFactorial is a user-defined function to calculate a factorial
BigInteger bigIntegerBar = new BigInteger("12390347425734985347537986930458903458");
BigInteger product = bigIntegerFact.multiply(bigIntegerBar);
}
}
EDIT: Oto BigInteger factorial function jeśli zajdzie taka potrzeba
tak, i dla C# rozważyć intX, http://www.codeplex.com/IntX/ –
Po prostu zauważ, że BigInteger używa naiwnego algorytmu mnożenia, więc jeśli potrzebujesz FAST mnożenia dużych liczb, należy korzystać z biblioteki innej firmy, która używa Karatsuby lub innego algorytmu podrzędnego^2. – Voo
Here is a patched version z java.lang.BigInteger który używa Karatsuba i toom-Cook
And here is a Java class które można mnożyć BigIntegers użyciu Schönhage-Strassen:
- 1. Przechowywanie bardzo dużych liczb całkowitych w MySQL
- 2. C++ Jaki typ zmiennej dla bardzo dużych liczb całkowitych?
- 3. C: Reprezentacja dużych liczb całkowitych
- 4. drukowanie bardzo dużych liczb zmiennoprzecinkowych
- 5. Efektywne mnożenie bardzo dużych macierzy w MATLAB
- 6. Mnożenie dwóch liczb całkowitych w C++
- 7. Dziwne zachowanie np.sqrt dla dużych liczb całkowitych
- 8. Obsługa "dużych" liczb całkowitych w C#
- 9. JavaScript: toString (36) dla dużych liczb całkowitych
- 10. Generowanie bardzo dużych liczb losowych java
- 11. Zrozumienie algorytmu Schönhage'a-Strassena (ogromne mnożenie liczb całkowitych)
- 12. Czy są jakieś solidne implementacje dużych liczb całkowitych w C?
- 13. Szybkie mnożenie i odejmowanie modulo a prime
- 14. Biblioteka dużych liczb JavaScript?
- 15. Mnożenie dwóch liczb całkowitych modulo przepełnione a trzecie
- 16. SSE mnożenie z 2 64-bitowych liczb całkowitych
- 17. Rodzaje dużych liczb
- 18. Szybkie max bez branchless dla liczb całkowitych bez znaku
- 19. Mnożenie punktowe liczb ujemnych
- 20. Mnożenie dużych macierzy na gpu
- 21. Jak podsumować tablicę liczb całkowitych w C#
- 22. Stream liczb całkowitych
- 23. Dzielenie liczb całkowitych
- 24. Java: grupowanie liczb całkowitych
- 25. W R lepiej używać liczb całkowitych64, liczbowych lub znakowych dla dużych liczb całkowitych?
- 26. Bardzo szybkie memcpy do przetwarzania obrazu?
- 27. Uzyskiwanie liczb losowych z listy liczb całkowitych
- 28. Określanie liczb parzystych/nieparzystych (liczb całkowitych)?
- 29. Przekraczanie dwóch liczb całkowitych bitowych
- 30. Przenoszenie dużych danych między serwerami Szybkie
retagged z odpowiednimi językami –
Przeczytaj o algorytmach mnożenia: http://en.wikipedia.org/wiki/Multiplication_algorithm – przemoc
"dziel i rządź" brzmi jak strona domowa k. W razie potrzeby prześlij ponownie. –