Вам нужно взглянуть на ваши интегральные размеры шрифта.Ваше первоначальное число составляет около 600 миллиардов, что не вписывается в 32-разрядное целое число.Что происходит с переполнением со знаком, технически не определено, но большинство современных систем сделают удар по модульной арифметике для вас.
В некоторых системах long
составляет 32 бита и 64 бита (что будет работать для вашего использования)Вот).Предполагая, что у вас есть немного C99 на вашей платформе, long long
составляет не менее 64 бит.Используйте его.
Будьте осторожны и с промежуточными результатами.Вы используете int
в некоторых ваших обработках (i
и divider
с LargestFactor
, и вы даже передаете int
на IsItPrime
).Используйте long long
для всех переменных, участвующих в вычислениях, или вы будете иногда обрезать часть ваших значений.
И, как предложил Сильвен Дефресн, поставьте LL
в конце вашего числового литерала.По крайней мере, так будет понятнее.
Если у вашего числа большие простые факторы, у вас будут проблемы с вашим алгоритмом, поскольку, похоже, он будет длиться вечно, но это будет отдельный вопрос.