如何生成不包含零的随机数?
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))))
我正在尝试创建一个程序,该程序在随机数字中找到 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))))