Как работать с большими целыми числами, которые не помещаются ни в одну из структур данных языка

Я пытаюсь решить предварительные задачи конкурса по программированию, и для двух задач мне нужно вычислить и вывести несколько очень больших целых чисел (например, 100 !, 2 ^ 100) .

Мне также нужен быстрый способ вычисления степеней этих больших целых чисел.

Не могли бы вы посоветовать мне некоторые алгоритмы или структуры данных для этого? (Кстати, я читал раздел «Арифметика произвольной точности» интерфейсов и реализаций C, но он не помогает для pow ())

РЕДАКТИРОВАТЬ: я думаю, что возведение в степень методом возведения в квадрат и сдвиг битов будут работать для мощности, но мне также нужен быстрый способ вычисления факториалов для этих целых чисел. Спасибо.

EDIT2: Для тех, кому интересно;

Найдите самую короткую длину битовой строки, которая включает в себя все битовые строки с длиной N (извините за мой английский, я приведу пример). N <= 10000

Например, самая короткая длина битовой строки, которая включает все битовые строки длиной 2 (00, 01, 10, 11), равна 5 (11001).

Мое решение этой проблемы было 2 ^ n + n - 1. (поэтому я должен вычислить степени двойки, я думаю, что буду использовать битовый сдвиг)

Другая проблема состоит в том, учитывая две длины, найти, как сколькими различными способами вы можете достичь длины 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. Мы рассчитаем ответ по модулю 1000000007.

Мое решение было: 2x + 3y = N, поэтому x = (N - 3y) / 2. Для y от 0 до 2 * N / 3, если x - целое число, тогда я должен вычислить обобщенную перестановку для этих X и Y, total + = (x + y)! / (х! * у!).

14
задан fdermishin 5 April 2011 в 10:38
поделиться