鱼C论坛

 找回密码
 立即注册
查看: 2163|回复: 7

[已解决]生成任意大的随机整数

[复制链接]
发表于 2022-7-11 14:20:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  初学者,好奇问下大佬们random.randint()怎么在无最大上限的条件下生成随机整数?
最佳答案
2022-7-11 15:10:15
Wildwind98 发表于 2022-7-11 14:54
我搜了一下Python2是可以通过sys模块来得到int的最大值:sys.maxint
Python3类似是可以sys.maxsize, ...

有最大值并不代表无最大上限不是吗?

有限(有最大值)!= 无限(无最大值)
limited != unlimited

Python 3 无限可以用 'inf' 表示,不用任何模块
  1. print(float('inf'))
  2. print(float('-inf'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-11 14:24:52 | 显示全部楼层
本来就是伪无限大(视整型最大容量而定)
  1. import random
  2. print(random.randint(1,123456789012345678901234567890))
复制代码
  1. 115444855295307557877753593032
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-11 14:54:43 | 显示全部楼层
本帖最后由 Wildwind98 于 2022-7-11 14:57 编辑
傻眼貓咪 发表于 2022-7-11 14:24
本来就是伪无限大(视整型最大容量而定)


我搜了一下Python2是可以通过sys模块来得到int的最大值:sys.maxint
Python3类似是可以sys.maxsize,但是我问了别人,说这个其实是可迭代对象的最大长度。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 15:10:15 | 显示全部楼层    本楼为最佳答案   
Wildwind98 发表于 2022-7-11 14:54
我搜了一下Python2是可以通过sys模块来得到int的最大值:sys.maxint
Python3类似是可以sys.maxsize, ...

有最大值并不代表无最大上限不是吗?

有限(有最大值)!= 无限(无最大值)
limited != unlimited

Python 3 无限可以用 'inf' 表示,不用任何模块
  1. print(float('inf'))
  2. print(float('-inf'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-7-11 16:24:31 | 显示全部楼层
仔细思考一下,就知道现有的情况下不可能有真 无限大啊,假如我们用某种方式实现了楼主所说的要求,那么就会有概率生成一个趋近于无限大的数字,那么这个数字需要的存储空间也是趋于无限大的,现在的内存大小可能趋于无限大吗,我没有见过,但是不代表没有,只能说我们普通人用的计算机肯定是不可能达到这个标准的~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-7-11 16:44:02 | 显示全部楼层
既然无上限了怎么能生成数字,无上限就是条件,条件为假,自然不能有结果。必须设定范围才可以。
当然无上限的数字存不存在我们不知道,只知道我们人类一切的知识都是在一定的范围中的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-7-11 16:55:01 | 显示全部楼层
lightninng 发表于 2022-7-11 16:24
仔细思考一下,就知道现有的情况下不可能有真 无限大啊,假如我们用某种方式实现了楼主所说的要求,那么就 ...

刚刚这个点确实想明白了。就是早些时候在看小甲鱼的Python零基础的课后作业,搞验证角谷猜想的代码,想着能不能生成任意大的整数去做,然后就有了这个问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-11 18:45:17 | 显示全部楼层
其实在不考虑随机数分布、不考虑有效利用(所以这种假设下得到的结果有什么意义)的前提下,可以利用生成式的方式构造实际上无上限的随机数,比如不断随机判断是否增加一个新的数位,如果是的话就继续随机这个数位上的值并继续循环,否则终止得到结果。
另外如果只是想要相当大(比如几千位十进制)的随机数并进行一些计算等操作的话可以参考一下一些高精度计算库如 GMP (对应 Python 模块 gymp ),处理大整数的四则运算以及更多数论算法在很多领域如(非对称)密码学中是非常常用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 14:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表