#python #python-3.x #math #largenumber
#python #python-3.x #математика #largenumber
Вопрос:
Я пытаюсь вычислить значение этого выражения:
int((1770246808796936040 * 1103515245 12345 / 65536) % 32768)
И это дает 0
. Без int
приведения это 0
тоже.
Кто-нибудь знает, почему это так? Эти числа слишком велики для Python? Есть какой-нибудь способ решить проблему? Ценю любую помощь.
Комментарии:
1. Я думаю, проблема решена, отметьте любой из ответов как принятый, чтобы закрыть его.
2. Как вы думаете, каким должен быть ответ и почему? Это похоже на один шаг LCG , в частности, см. 4-ю строку этой таблицы , но вы неправильно поняли порядок операций и неправильно заключили его в скобки. В python правильное выражение будет
((1770246808796936040 * 1103515245 12345) // 65536) % 32768
Ответ №1:
%
Оператор выдает остаток от деления. Поскольку
(1770246808796936040 * 1103515245 12345 / 65536)
делится на 32768, результат равен 0. Чтобы получить частное, вы должны использовать оператор /
вместо %
.
Ответ №2:
Число, вычисленное из выражения
1770246808796936040 * 1103515245 12345 / 65536
делится на 32768, поэтому вы получаете 0.
Чтобы дать вам представление о способности Python обрабатывать огромные числа, вы можете увидеть это:
>>> 10**1000
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Ответ №3:
Потому что комбинация чисел такова, что результат равен 0. Увеличьте или уменьшите любое число даже на 1, и вы увидите, что оно не равно 0. Например, смотрите Ниже. Я изменил 32768 на 32769.
print(int((1770246808796936040 * 1103515245 12345 / 65536) % 32769))
Это дает.
21725