-4

2^57,885,161 - 1整数として何バイトを保存する必要がありますか?

4

2 に答える 2

6

2の補数を実行していて、8ビットが1バイトに等しいと仮定します。少なくとも(57,885,161 + 7)/8バイトが必要です。

おそらくそれを説明する簡単な方法が必要な場合は、2 ^ 32-1が32ビット整数が表す最大数であり、32が8で割り切れる2の底であるという数学的帰納法を使用することです。バイトあたりのビット数。2^32-1は4バイトになります。

この仮定の定義を拡張すると、8で割り切れない数2 ^ 57885161が得られますが、それに7を加えると割り切れます。したがって、2 ^ 57885168が残り、8で割ると、結果の7235646バイトが得られます。

これはGregSのコメントの説明にすぎません。

于 2013-02-10T00:26:31.303 に答える
3

答えは、それをどうするかによって大きく異なります。メルセンヌ素数のみで動作するプログラムを作成している場合、それがメルセンヌ素数を表すことを理解すれば、それを格納するのにおそらく4バイトしか必要ありません。

通常の非圧縮の「大きな整数」として保存する場合は、約7235646バイト(ceildiv(57885161、8))かかります。一部の形式は他の形式よりも効率的です。たとえば、Pythonlongフォーマットは7718048バイトを使用して(2**57885161 - 1).__sizeof__()、フォーマットのオーバーヘッドのためにこの数値をマシン()に格納します(Pythonは30ビットの数字を使用するため)。

于 2013-02-10T00:18:03.710 に答える