Math 十六进制(数字)所需的数学指导
我想创建一个文本文件或者数据库?以下两个十六进制值之间的所有可能十六进制值Math 十六进制(数字)所需的数学指导,math,numbers,hex,Math,Numbers,Hex,我想创建一个文本文件或者数据库?以下两个十六进制值之间的所有可能十六进制值 00251eb27d8d2deb15d615edd08dd7cf402638697a4aba6c7c199ce4ef858962 002526837f828960f7d3c1e8359eaea84e38183c7ab9345a663b474063ca9e20 制约因素包括: 64位十六进制值 仅介于上述两个数字之间 重复相同值的次数不得超过3次。(例如,777可以,但7777不行。) 有人能帮我理解有多少可能性吗?
00251eb27d8d2deb15d615edd08dd7cf402638697a4aba6c7c199ce4ef858962
002526837f828960f7d3c1e8359eaea84e38183c7ab9345a663b474063ca9e20
制约因素包括:
- 64位十六进制值
- 仅介于上述两个数字之间
- 重复相同值的次数不得超过3次。(例如,777可以,但7777不行。)
10^72.25
的情况53947059527385558921671339033187394318456441692296348428515181989270718 = 5.39*10^70
我们也可以通过hex进行粗略估算:
000007D101F55B75E1FDABFA6510D6D90E11DFD3006E79EDEA21AA5B744514BEh
||<----------------------58 hex digits------------------->|
|
7h -> 0111b -> 3 bits
再次转换为颓废:
235 * log(2)/log(10) = 70.74
导致估算:
10^70.74 = 10^0.74 * 10^70 = 5.4954*10^70
这与上面的真实交易非常接近dec_digits/hex_digits = log(16)/log(10) = 1.204119982655924780854955578898
dec_digits = hex_digits * 1.204119982655924780854955578898
dec_digits = 60 * 1.204119982655924780854955578898 = ~72.25
例如,我们得到了58个十六进制数字。那么,我们可以有多少后续的n=4
数字,比如7777
?如果我们把7777
从头到尾,即digits-n=58+1-4
可能的位置
对于每个位置,结果数字可以有“任意”组合,因此可能性将乘以未使用数字的可能性:
(digits+1-n)*16^(digits-n)
现在,n=
因此,可能性被定义为:
(digits+1-4)*16^(digits+1-4) + (digits+1-5)*16^(digits-5) + (digits+1-6)*16^(digits-6) ... + 1
(digits-3)*16^(digits-4) + (digits-4)*16^(digits-5) + (digits-5)*16^(digits-6) ... + 1
现在重复的数字可以是0..F
中的任意一个,所以整个stuf也可以乘以16
(digits-3)*16^(digits-3) + (digits-4)*16^(digits-4) + (digits-5)*16^(digits-5) ... + 16
同样,这是粗略估计,不考虑边缘案例和重复性(你知道如果有2次或更多的重复,它们会被计算多次而不是一次,而且重复序列的相邻数字不能有相同的数字值等等……精确地计算所有情况会导致疯狂的方程式,与粗略估计相差不会太大)因此,由此得出的粗略估计是:
16^digits - sum[i=1,2,3,...,digits-3]( i*16^i )
然而,结果数据将是巨大的,这也需要计算能力……因此,你很可能在完成之前就已经老了,更不用说在那之前很久就填满你的存储了……这些数字之间的不同值大约为10^58。这是一个比估计值至少大一百万倍的值地球上原子的数量(10^51)。以及其他限制条件(无重复序列)不要真的减少这个数量。不用说你做不到。谢谢你的回答。你能解释一下你是如何算出10^58的吗?我最想知道的是如何算出数学。你完全正确。数数数字可以得到十六进制数。然后是一个简单的方法来估计十进制数,如果一个数字有h个十六进制数字,那么它的十进制数字大约是d=h*6/5。这是基于10^6~16^5(=1048576)这一事实。我用计算器仔细检查了我的计算结果,结果确实是错误的,因为它是十六进制的。你的范围内不同数字的数量是~10^70。。。(请记住,已知宇宙中的原子数估计为10^80)。@cigolon I添加了一个带有修正值的答案…从hex(无重复约束)进行的估计是可行的,没有bigint数学,仅在字符串上,我的误差仅略小于2%…重复约束是完全不同的事情。。。
(digits+1-4)*16^(digits+1-4) + (digits+1-5)*16^(digits-5) + (digits+1-6)*16^(digits-6) ... + 1
(digits-3)*16^(digits-4) + (digits-4)*16^(digits-5) + (digits-5)*16^(digits-6) ... + 1
(digits-3)*16^(digits-3) + (digits-4)*16^(digits-4) + (digits-5)*16^(digits-5) ... + 16
16^digits - sum[i=1,2,3,...,digits-3]( i*16^i )
1. increment
2. test validity
3. if valid store result
4. if end still not reached goto 1