如何生成不包含零的随机数?

How to generate random numbers which do not include zeros?

我正在尝试创建一个程序,该程序在随机数字中找到 multiplicative persistence。然而,该程序必须处理大数 (>10233)。但是,当我使用 random.randint(10**233, 10**400) 时,我不禁注意到绝大多数数字都包含一个零,这将导致 0 乘法持久性。在我的算法中,我试图通过以下方法摆脱这些数字:

def find_new_i():
    i = 10
    while "0" in str(i):
        i = random.randint(10**233,10**400)
    return i

但是,这种方法真的很慢,而且不能很快生成数字。

有没有人对更有效的方法有任何想法?

如此大的数字出现 0 的几率非常高,这就是为什么 while 循环可能会重复多次。

最好用 1 到 9 之间的随机数字替换任何零。

def find_new_i():
    i = random.randint(10 ** 233, 10 ** 400)
    i = int(''.join(str(random.randint(1, 9)) if d == '0' else d for d in str(i)))
    return i

或者如果您不介意将所有零替换为相同的随机数字:

i = int(str(i).replace('0', str(random.randint(1, 9))))

在这个阶段,简单地“手动”构建数字可能更有意义(但是这种方法比上面的方法慢大约 4 倍,请参阅评论):

def find_new_i():
    return int(''.join(str(random.randint(1, 9))
               for _ in range(random.randint(233, 400))))