У меня есть следующий фрагмент Python
v=(2*(a/2)+1)**2
U=int(((4*N+v)**.5-1)/4)
N имеет порядок 10 ^ 12, а переменная «a» принимает много значений, но также имеет величину 10 ^ 12 в своем максимальном значении.
Однако я не могу написать это на C ++, не переполнив что-то где-то, и я немного застрял.
edit: И да, 2 * (a / 2) является преднамеренным, потому что в Python деление такое же, как и деление по полу. Иногда a является нечетным, поэтому мне нужно его наполовину сократить, нарезать, затем умножить на 2, что и делает этот код.
>>> a=10**12
>>> v=(2*(a/2)+1)**2
>>> log(v,2)
79.72627427729958
Значение, которое вы рассчитываете, требует 80 битов, а long long — только 64. Для обработки вам понадобится расширенный арифметический пакет.
Других решений пока нет …