Math 十六进制(数字)所需的数学指导

Math 十六进制(数字)所需的数学指导,math,numbers,hex,Math,Numbers,Hex,我想创建一个文本文件或者数据库?以下两个十六进制值之间的所有可能十六进制值 00251eb27d8d2deb15d615edd08dd7cf402638697a4aba6c7c199ce4ef858962 002526837f828960f7d3c1e8359eaea84e38183c7ab9345a663b474063ca9e20 制约因素包括: 64位十六进制值 仅介于上述两个数字之间 重复相同值的次数不得超过3次。(例如,777可以,但7777不行。) 有人能帮我理解有多少可能性吗?

我想创建一个文本文件或者数据库?以下两个十六进制值之间的所有可能十六进制值

00251eb27d8d2deb15d615edd08dd7cf402638697a4aba6c7c199ce4ef858962
002526837f828960f7d3c1e8359eaea84e38183c7ab9345a663b474063ca9e20
制约因素包括:

  • 64位十六进制值
  • 仅介于上述两个数字之间
  • 重复相同值的次数不得超过3次。(例如,777可以,但7777不行。)
有人能帮我理解有多少可能性吗?或者帮助我了解这是否是一个现实的选择? 我曾考虑使用crunch之类的工具来生成文本文件输出,但首先我想看看这是否现实,我很难弄清楚如何计算它。我真的很想知道如何做数学来解决这个问题

为了计算出数学公式,您可以简化十六进制值,但您需要对其进行解释

  • 所有数字粗略估算

    正如Alain Merigot所建议的,您只需计算第一次更改(从MSB到LSB)的位数:

    因为任何基的整数位数之间的比率都是常数,所以可能出现
    10^72.25
    的情况

  • 所有数字都精确

    只需减去2个数字,使结果为非负(如果没有bigint,则在带有single for循环的字符串上是可行的)

    如果我使用此函数将其转换为dec,结果是:

    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