Wildwind98 发表于 2022-7-11 14:20:48

生成任意大的随机整数

初学者,好奇问下大佬们random.randint()怎么在无最大上限的条件下生成随机整数?

傻眼貓咪 发表于 2022-7-11 14:24:52

本来就是伪无限大(视整型最大容量而定)
import random
print(random.randint(1,123456789012345678901234567890))115444855295307557877753593032

Wildwind98 发表于 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,但是我问了别人,说这个其实是可迭代对象的最大长度。。。

傻眼貓咪 发表于 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' 表示,不用任何模块
print(float('inf'))
print(float('-inf'))

lightninng 发表于 2022-7-11 16:24:31

仔细思考一下,就知道现有的情况下不可能有真 无限大啊,假如我们用某种方式实现了楼主所说的要求,那么就会有概率生成一个趋近于无限大的数字,那么这个数字需要的存储空间也是趋于无限大的,现在的内存大小可能趋于无限大吗,我没有见过,但是不代表没有,只能说我们普通人用的计算机肯定是不可能达到这个标准的~

smyiuo_11 发表于 2022-7-11 16:44:02

既然无上限了怎么能生成数字,无上限就是条件,条件为假,自然不能有结果。必须设定范围才可以。
当然无上限的数字存不存在我们不知道,只知道我们人类一切的知识都是在一定的范围中的

Wildwind98 发表于 2022-7-11 16:55:01

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

刚刚这个点确实想明白了。就是早些时候在看小甲鱼的Python零基础的课后作业,搞验证角谷猜想的代码,想着能不能生成任意大的整数去做,然后就有了这个问题。

dolly_yos2 发表于 2022-7-11 18:45:17

其实在不考虑随机数分布、不考虑有效利用(所以这种假设下得到的结果有什么意义)的前提下,可以利用生成式的方式构造实际上无上限的随机数,比如不断随机判断是否增加一个新的数位,如果是的话就继续随机这个数位上的值并继续循环,否则终止得到结果。
另外如果只是想要相当大(比如几千位十进制)的随机数并进行一些计算等操作的话可以参考一下一些高精度计算库如 GMP (对应 Python 模块 gymp ),处理大整数的四则运算以及更多数论算法在很多领域如(非对称)密码学中是非常常用的。
页: [1]
查看完整版本: 生成任意大的随机整数