Не удается вычислить значение в Python

#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