Оператор python / / является целочисленным делением.
Но в случае a * a // b он работает как a * a / b ..
a = 10 b = 3 a * a//b >> 33 a//b * a >> 30 temp = a//b a * temp >> 30
Почему это происходит ??
Вы, вероятно, хотели написать a * (a//b). Умножение происходит перед делением, так как оно слева и имеет тот же приоритет.
a * (a//b)
Порядок операций одинаков в обоих случаях, но неявная целочисленная операция усечения происходит в разных частях двух операторов.
В первом случае в конце вы усекаете целое число во втором случае вы делаете это в начале. В результате вы получите разные ответы.