为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中处理非常大的数字

在Python中处理非常大的数字

紫衣仙女 2019-08-02 16:43:32
在Python中处理非常大的数字我一直在考虑用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]和    def HashVal(self):       return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]这会给每只手一个数值,通过模数可以告诉我手中有多少国王或多少颗心。例如,任何有五个或更多球杆的手将平均分为2 ^ 5; 任何有四个国王的手都会平均分为59 ^ 4等。问题是,像AcAdAhAsKdKhKs这样的七张牌的手的哈希值大约为62.7千万亿,在内部表示需要大于32位。有没有办法在Python中存储这么大的数字,这将允许我对它进行算术运算?
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

Python支持“bignum”整数类型,可以使用任意大数。在Python 2.5+中,此类型被调用long并与int类型分开,但解释器将自动使用更合适的类型。在Python 3.0+中,int类型已完全删除。

这只是一个实现细节 - 只要您有2.5或更高版本,只需执行标准数学运算,任何超过32位数学边界的数字都将自动(并透明地)转换为bignum。

您可以在PEP 0237中找到所有血腥细节。


查看完整回答
反对 回复 2019-08-02
?
SMILET

TA贡献1796条经验 获得超4个赞

你可以为它的乐趣做到这一点,但除此之外,这不是一个好主意。它不会加速我能想到的任何事情。

  • 手中获取卡将是一个整数因子分解操作,这比仅访问阵列要昂贵得多。

  • 添加卡将是乘法,并且移除卡分区,两个大的多字数,这比在列表中添加或删除元素更昂贵。

  • 手的实际数值不会告诉你什么。您将需要考虑素数并遵循扑克规则来比较两手牌。h1 <h2这样的手意味着什么。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 4234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信