По поводу факториала 1000 и более толстых факториалов.
Есть
формула Стирлинга. Она позволяет приблизительно прикинуть
число в вещественной форме.
Тебе это надо чтобы ответить на вопрос,
а вообще принципиально возможно ли посчитать это
число и положить его в память. Например для 1000 последние члены этого ряда в умножении будут
добавлять по 3 десятичных разряда.
.......998 * 998 * 999 =
Должно быть порядка 2500 знаков.
По поводу AVX и прочее. Один регистр AVX будет брать 512 бит. В перерасчете на десятичную
систему - можно делить грубо на 3 и это будет 170 десятичных цифр. Тоесть надо много
таких регистров.
По поводу этого кода.
unsigned long long result = factorial[j] * i + carry;
factorial[j] = result % BASE;
carry = result / BASE;
Я не понимаю что здесь происходит. Зачем ты переводишь в систему счисления с основнием 1000000000
Двоичная система нормально работает. Используй ее возможности. А это - какой-то рудимент.
Я просто не программист, это у меня задание такое.
Сторонние библиотеки по условиям нельзя.
Про SIMD слышу впервые.
Это вообще приводит в изумление. По хорошему, мультипоточка и параллелизм это очень
сложная тема. Очень синьорная и в ней много всяких квантовых эффектов. И чтобы ей
просто заниматься нужно иметь хотябы 1-2 года опыта. Сомнительно чтобы новичек
вообще что то написал (и отладил под нагрузкой) работающее. Или разве что тебе
ChatGPT что-то там написал и ты просто
случайно где-то проскочил. Повезло наверное.