本页是关于数字的,这些数字的十进制中没有一个或一些给定的数字,或者可能没有其他的B基扩展。
介绍
尽管关注数字的十进制数字(OEIS中所谓的“基数”序列)有时会被忽视,但在这个意义上的一些考虑最近重新引起了人们的极大兴趣:
- 2016年,欧洲数学学会(EMS)授予詹姆斯·梅纳德“数字受限的素数”荣誉奖[1][2][3]
- 同样在2016年,RJL Oliver和K Soundararajan关于给定最后数字的连续素数的频率的研究也在国际上引起了巨大的关注。[4]
相关序列
基本序列
根据要避免的数字,我们有以下序列和素数子集:
避免数字0 1 2 3 4 5 6 7 8 9没有的数字A052382号 A052383号 A052404号 A052405号 A052406号 A052412号 A052413号 A052419号 A052421美元 A007095号素数子集A038618号 A038603型 A038604型 A038611型 A038612号 A038613号 A038614号 A038615号 A038616号 A038617号
特殊情况:
- 没有十进制数字9的数字列表与所有数字列表相同,但以9为基数。这就产生了一种有效的方法来计算所有这些以及其他数字无效序列的第n项,请参见#程序第节。
- 没有数字“0”的数字/素数通常称为“零数字”/素数。(带有数字0或“0”的素数有时被戏称为“顽皮素数”。因此,无零素数将是非顽皮素值。)
- 对于其他数字,有时使用“ban-X”序列(例如,ban-2或“Banto”)的(有趣的)术语,类似于“Eban数字”、“Uban数字“。。。(但指数字的英文名称,不得有字母E或U等。)
所有这些序列都是10自动(请参阅此处的索引).
概括
- 排除的2位数字:对于排除的数字X={8,9},这是A007094号:以8为基数的数字
- 排除3位数字:对于排除的数字X={7,8,9},这是A007093号:以7为基数的数字
- 排除4位数字:对于排除的数字X={6,7,8,9},这是A007092号:以6为基数的数字
- 对于X={2,3,5,7}:素数被排除,所以我们得到的数字只有非素数
- 对于X={0,(4?),6,8,9}:“神圣”数字Axxx的补码(其中一个数字中有一个“洞”)。
- 排除5位数字:对于排除的数字X={5,…,9},这是A007091号:以5为基数的数字
- 对于X={0,2,4,6,8}:只有奇数的数字
- 对于X={1,3,5,7,9}:只有偶数的数字
- 排除6位数字:对于排除的数字X={4,…,9},这是A007090号:以4为基数的数字
- 对于X={0,1,4,6,8,9},非素数被排除,所以我们得到了Annn:只有素数{2,3,5,7}的数
- 对于X={0,1,2,3,5,7}:素数和0和1被排除在外,所以我们得到只有复合数字{4,6,8,9}的数字
- 排除的9位数字:对于排除的数字X={0,2,…,9}(只允许1),这些是重复单位A000042号,R(n)=(10^n-1)/9(也称为以1为基数的数字)。
程序
算法
对于基本序列,很容易实现整套功能:
- 为此,使用n的基数(b-1)展开式,并用下一个较大的数字替换所有>=排除的数字。(零位数字需要稍微不同的处理,对于9位数字,不需要“替换……”步骤。)
- 此方法还可推广到避免多个给定数字的数字集:
- 如果只允许m个数字,请使用以m为基数的扩展并替换数字0。。。,m-1乘以相应的允许数字d(1)。。。,d(m)。
- isAxxx或AxxxQ:检查Axxx中的成员身份。
- 直接的方法是计算基数b的展开式,并检查给定的数字是否存在。原则上,我们不需要整个展开:一旦计算出第一个禁止数字,我们就可能返回false。如果计算出所有数字,我们可以从头开始扫描,并在发现禁用数字后停止。这个最差的就效率而言,可以计算数字出现的次数,如果大于0,则返回false。
- 然而,通常计算整个扩展的内置函数比一个接一个计算数字的自定义实现提供更快的代码。即使是检查数字集内禁止数字的成员身份(按递增顺序并删除重复)也会更快。
- nextAxxx:给定n,计算Axxx的最小项>n。[=>提供这种结构的语言中的迭代器。]
- 与其使用isAxxx检查n的所有后续数字,不如找到n+1中的第一个禁止数字,将其增加一,并将后续数字设置为尽可能小的值。(当以b为基数的禁止数字为0或b-1时,需要考虑一些其他因素。)
- Axxx_vec:前n个初始值的向量。通常,(x_i;i=1..n),对于i>1,x_i=nextAxxx(x_{i-1})。
- Axxx_upto:不超过给定极限的项向量。
- 易于实现为
选择(isAxxx,[0..n])
,但使用nextAxxx进行while循环可能更有效
PARI代码
(关于以下样式:函数定义{isAnnn(n)=…},Axxx_vec()=。。。等被“包装”到一个代码中,该代码不仅定义了它们,还将它们应用于小值,提供了一个使用和检查正确性的示例。整行可以复制到PARI命令行或[联机解释器]中,它将显示将函数应用于某些值的结果,但主要目的是在其后定义函数。)
应用({A007095号(n) =来自数字(数字(n-1,9))},[1..99])#第n个数字避开数字9:以9为基数写n-1!#对于避免数字<9的数字,我们也以9为基数写n,但增加数字>=我们想要避免的数字应用({2014年5月14日(n) =来自数字(应用(d->d+(d>=6),数字(n-1,9))},[1..99])#第n个数字避开数字6#对于无零数字,稍有不同:减去和9^k,然后以9为基数写,再加上单位1…1应用({A052382号(n,L=logint(n,9))=fromdigits(digits)(数字(n-9^L>>3,9))+10^L\9},[1..100])#n-th无零数字
序列的下一个较大项:(这里:数字没有数字6)
next_A052414(n,d=数字(n+=1))={对于(i=1,#d,d[i]==6&&return((1+n\d=10^(#d-i))*d));n}#最小a(k)>n
使用示例:前n个术语>=M(如果给定)
({A052414_vec(n,M=0)=M--;向量(n,i,M=next_A052414(M))})(10,1000)
特性功能:
选择({is_A052414(n)=!setsearch(集合(数字(n)),6)},[0..99])
天真的应用程序:(最好使用上面的next_Annn():左侧可能有一个大范围的禁用数字。
({A052414_upto(N,M=0)=select(is_A052414,[M.N])})(99)\\函数在{…}内,在“检查和演示包装器”外
素数子集:
从上面选择({is_A038614(n)=is_A052414(n)&&isprime(n)},[1..350])\\is_A052414({A038614_upto(N,M=2)=选择(is_A052414,素数([M,N]))})(350)\\计算项<=N(如果给定,则>=M)next_A038611(n)={until((n=nextprime(n+1))==n=nex-A052405(n-1),);n}\\更有效
使用示例:计算前n项>=M的列表(如果给定):
({A038611_vec(n,M=2)=M--;向量(n,i,M=next_A038611(M))})(20,1000)
效率较低的变体:(解释原因!)
next_A038614(n)={直到(isprime(n),n=next_A52414(nextprime(n+1)-1));n}#或:直到;n个
Python代码
下面是包含生成器函数的类的示例代码。
项目:定义类IntSeq和子类NumbersAvoidingDigit。。。可以这么说A052404号=数字无效数字('2')其中应提供A052404号.术语(n),A052404号.有(n),A052404号.下一个(n),A052404号.范围([开始,]停止)。。。
班A052404号:“”“没有数字‘2’的数字,也称为Bantu/banto/bantwo/ban2数字与一个、两个或零个参数一起使用,对应于开始/结束值(不是索引!),例如:列表(A052404号.范围(50))[x代表x英寸A052404号.range(11000)if isprime(x)]#这将生成“Banto primes”A。。。对于x英寸A052404号(): ...; 如果。。。中断;#(无限发电机)"""def range(self,*limits):#默认限制:[[start=0,]stop=math.inf]lim=极限[-1]如果极限为其他math.infn=限制[0],如果长度(限制)>1,则为0当n<lim时:s=str(n);t=s.find('2')如果t<0:产量n;n+=1否则:t=10**(长度-1-t);n+=t-n%t
为了“好玩”,请使用以下单线:
定义A052413号(n) :n-=1;返回和(范围内e的n//9**e%9*6//5*10**e(math.ceil(math.log(n+1.9)))定义next_A052413(n):n+=1;s=str(n);s=10**(长度-1-s.find('5'));如果s>n,则返回n,否则n+s-n%s#计算最小a(k)>n定义A052413_upto(N=math.inf,a=0):而a<N:生成a;a=下一个_A052413(a)定义A052413_list(n):A=A052413-upto();return[next(A)for i in range(n)]#用于说明-可能[A052413号(i) 因为i在(1,n+1)范围内]更好!
另请参见
参考文献
作者
M.F.Hasler,避开特定数字的数字.— 摘自整数序列在线百科全书®Wiki(OEIS®Wiki)。[https://oeis.org/wiki/Numbers_avoiding_certain_digits网站]初始版本:2020年1月12日