Целочисленное переполнение — Python против C++ [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Целочисленное переполнение — Python против C++ [дубликат]

Сообщение Anonymous »

Я пытаюсь создать простую (не очень эффективную) функцию для вычисления n-го простого числа в C++. Сначала я написал его на Python, и результаты оказались ожидаемыми. Однако когда я перевел функцию на C++, я получил другие результаты.
Вот функция, написанная на Python:

Код: Выделить всё

def nth(n):
if n == 1:
return 2
elif n == 2:
return 3
else:
count = 2
factorial = 1
prime = 3
while count != n:
factorial *= prime*(prime-1)
prime += 2
if prime*(factorial // prime) != factorial:
count += 1
return prime
Когда я запускаю nth(10), я получаю 29, 10-е простое число.
Вот функция, написанная на C++:

Код: Выделить всё

long long nth(int n) {
if (n == 1) {
return 2;
} else if (n == 2) {
return 3;
} else {
int count = 2;
long long factorial = 1, prime = 3;
while (count != n) {
factorial *= prime*(prime - 1);
prime += 2;
if (prime*(factorial / prime) != factorial) {
count++;
}
}
return prime;
}
Когда я запускаю long long prime = nth(10); , я получаю 25.
Я подозреваю, что проблема связана с тем, как обрабатывается целочисленное переполнение. Я понял, что факториал/простое в C++ не дает того же результата, что факториал // простое в Python. Я только изучаю C/C++ и не смог найти решение при просмотре. Буду признателен за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ython-vs-c

Вернуться в «C++»