Самый быстрый способ умножения больших чисел на python? - PullRequest
2 голосов
/ 09 марта 2020

Взгляните на следующий код:

total = 0
for j in range(int(start)-1,int(end)):
    total += (A+j)*(B+j)*(C+j)*(D+j)
print(total%1000000007)

Теперь код работает нормально, но мне нужно уменьшить сложность времени.

1 <= A, B, C, D <= 10 ^ 5 </p>

1 <= начало <= конец <= 10 ^ 5 </p>

Как видите, числа могут быть очень большими. Как я могу ускорить часть умножения? Я попробовал русскую крестьянскую технику. Это все еще не достаточно быстро.

Также я читал похожие посты по умножению python, но это не могло решить мою проблему.

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Я думаю, для этого достаточно вспомнить, что (a+b)%c = a%c +b%c

Поскольку каждая часть l oop не очень большая, вы можете попробовать:

total = 0
for j in range(int(start)-1,int(end)):
    total = (total + (A+j)*(B+j)*(C+j)*(D+j)) %1000000007
print(total)
0 голосов
/ 09 марта 2020

Здесь вы можете использовать модульную арифметику c.

(a+b)%c=(a%c+b%c)%c

(a∗b)%c=((a%c)∗(b%c))%c

(a−b)%c=((a%c)−(b%c)+c)%c

(a/b)%c=((a%c)∗(b−1%c))%c

Это обеспечит целочисленное переполнение и сохранит сложность времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...