Видимо ошибка в длинных вычислениях. Сложно просто глядя на код что-то сказать.
Для оптимизации тут применена многопоточность, но похоже, что присутствуют гонки, хотя есть попытка использовать мьютекс для защиты, но явно этого не достаточно.
Похоже, что эта программа толком не отлаживалась.
Думаю, больше толку было бы для оптимизации, если бы использовались SIMD инструкции, а не многопоточность.
Есть оптимизированные библиотеки для длинной арифметики, проще всего было бы использовать какую-то подобную библиотеку, а не изобретать собственный велосипед. С использованием такой библиотеки задача была бы достаточно тривиальной.