[解決済み] Pythonで非常に大きな数を扱う
2022-04-25 11:17:06
質問
Pythonでポーカーの手札を高速に評価することを検討しています。処理を高速化する一つの方法として、すべてのカードのフェイスとスートを素数で表現し、それらを掛け合わせて手を表現することを思いつきました。白に。
class PokerCard:
faces = '23456789TJQKA'
suits = 'cdhs'
facePrimes = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 53, 59, 61]
suitPrimes = [2, 3, 5, 7]
AND
def HashVal(self):
return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]
そうすると、それぞれの手に数値が与えられ、モジュロによって、手の中にキングが何枚あるのか、ハートが何枚あるのかがわかるようになります。例えば、クラブが5枚以上ある手は2^5で均等に割り、キングが4枚ある手は59^4で均等に割るなどです。
問題は、AcAdAhAsKdKhKsのような7枚の手札のハッシュ値は約62兆7000億であり、内部で表現するには32ビットよりかなり多くなってしまうことです。このような大きな数値をPythonに格納し、それに対して算術演算を行う方法はないでしょうか?
どのように解決するのですか?
Pythonは、任意の大きさの数を扱うことができる"bignum"という整数型をサポートしています。Python 2.5+では、この型は
long
とは別のものであり
int
という型がありますが、インタプリタは自動的にどちらか適切な方を使用します。Python 3.0+ では
int
型は完全に削除されました。
バージョン2.5以降であれば、標準的な数学演算を行うだけで、32ビット数学の境界を超える数値は自動的に(透過的に)ビグナムに変換されます。
詳細については PEP 0237 .
関連
-
python implement mysql add delete check change サンプルコード
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Python Pillow Image.save jpg画像圧縮問題
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】OverflowError: (34, '結果が大きすぎる')