Я пытаюсь решить предварительные проблемы с программированием и по двум проблемам, которые я должен рассчитать и напечатать очень большие целые числа (например, 100!, 2 ^ 100).
Мне также нужен быстрый способ вычисления степеней этих больших целых чисел.
Можете ли вы посоветовать мне некоторые алгоритмы или структуры данных для этого? (Кстати, я читал раздел C произвольной точности арифметики C-интерфейсов и реализаций, но это не помогает для pow())
EDIT: Я думаю, что возведение в степень методом квадратизации и бит-сдвига будет работать на мощность, но мне также нужен быстрый способ вычисления факториалов для этого ints. Спасибо.
EDIT2: для тех, кто заинтересован;
Найдите кратчайшую длину строки бита, которая включает в себя все битовые строки с длиной N (извините за мой английский, я приведу пример). N < 10000
Например, кратчайшая длина строки бита, которая включает в себя все битовые строки длиной 2 (00, 01, 10, 11), равна 5 (11001).
Мое решение для этой задачи было 2 ^ n + n - 1. (поэтому я должен вычислить степень 2, я думаю, что буду использовать бит-сдвиг)
Другая проблема состоит в том, что с учетом двух длин можно найти, как много разных способов достичь длины N. Например, ввод 10, 2, 3. Затем вам нужно достичь 10 с помощью 2 и 3 (например, 2 + 2 + 2 + 2 + 2, 2 + 2 + 3 + 3, 3 + 2 + 2 + 3, 3 + 3 + 2 + 2...). 1 <= N < 2 ^ 63. Мы вычислим anwser в mod 1000000007.
Мое решение было, 2x + 3y = N, поэтому x = (N - 3y)/2. Для y от 0 до 2 * N/3, если x является целым числом, тогда я должен рассчитать обобщенную перестановку для этих X и Y, total + = (x + y)!/(x! * y!).