2

次のPythonスニペットがあります

v=(2*(a/2)+1)**2
U=int(((4*N+v)**.5-1)/4)

N は 10^12 のオーダーで、変数 "a" は多くの値を取りますが、最大でも 10^12 の大きさです。

しかし、どこかで何かをオーバーフローさせずにこれを C++ で書くことはできないようで、少し行き詰まっています。

編集: はい、2*(a/2) は意図的なものです。なぜなら、Python では除算はフロア除算と同じだからです。時々 a が奇数なので、半分にし、床にし、2 倍にする必要があります。これがそのコードの機能です。

4

1 に答える 1

3
>>> a=10**12
>>> v=(2*(a/2)+1)**2
>>> log(v,2)
79.72627427729958

計算する値には 80 ビットが必要で、long long はわずか 64 ビットです。それを処理するには、拡張演算パッケージが必要です。

于 2012-11-27T03:32:58.443 に答える