本网站由捐赠支持OEIS基金会.

M.F.Hasler/A039986

来自OeisWiki
跳转到:航行,搜索

A039986号=使每个不同的数字排列都是复合的素数(包括带前导零的排列):

2, 3, 5, 7, 11, 19, 23, 29, 41, 43, 47, 53, 59, 61, 67, 83, 89, 151, 211, 223, 227, 229, 233, 257, 263, 269, 353, 383, 409, 431, 433, 443, 449, 487, 499, 523, 541, 557, 599, 661, 677, 773, 827, 829, 853, 859, 881, 883, 887, 929, 997, 1447, 1451, 1481, 2111

此序列的代码:(添加到OEIS.org/A039986号2018年7月1日)

A039986_row(n)={/*计算长度n项*/如果(n>1/*最后一位的标准仅适用于长度>1*/,local(D=eval(Vec(“0245681379”))/*所有可能的数字,可能的结束数字排在最后:等价于vecsort([0..9],(a,b)->isprime(10+a)-isprime(10+b))*/,u=vectorv(n,i,10^(n-i))/*10:点积d.u的幂略快于fromdigits(d)*/,nextperm()=/*将“全局”变量p更改为[1..n]的“下一个”置换*/对于(i=2,n,/*i=我们将减少的索引的位置。(我们排列“左优先”:123…、213…、132…等)*/(t=p[i]-1)||下一个;/*我们可以减少这个指数而不得到0吗?否则转到下一个位置*/while(setsearch(Set(p[i+1..n]),t)/*左侧是否有减少的索引*/||d[t]==d[p[i]]/*。。。这会改变数字吗*/,t--||下一(2)/*。。。否则试试下一个较小的;如果遇到0,则转到下一个位置*/);i<n/*最右边的位置*/||位测试(650,d[t])/*则数字必须在1379之间*/||return/*else(右边是1379以外的数字)我们完成了:所有后续烫发都是复合的*/;/*现在,如果我们用较小的t替换p[i],并将其他索引重新排序到p[i'的左侧,则所有标准都满足了*/p=concat([setminus(Set(p[1..i]),[t])/*将索引(除t外)重新排序到左侧*/,t,p[i+1.n]]);/*然后将t(=新p[i])和其他索引附加到右侧(不变)*/返回(1))/*结束(i);也是nextperm()的末尾:如果完成所有排列,则返回0*/,L=List()/*结果列表*/,f/*“已找到”*/,p/*排列*/,d/*所选数字以递增顺序*/)/*“局部”变量和过程结束;现在遵循主循环*/;forvec(i=向量(n,j,[7^(j==n),10])/*数字的选择:索引1..9对应数字“0”,“2”,…,“7','9' ; 只生成递增向量i,最后=第n个索引必须大于等于7,即数字1,3,7或9*/,vecsum(d=vecextract(d,i)/*对应于索引i列表的数字列表*/)%3||next/*位数之和不能被3*/整除;f=0/*到目前为止没有发现*/;p=[1..n]/*初始排列=id*/;直到(!nextperm()/*完成循环体之后,转到下一个相关置换;如果一切都完成了,就结束*/,i素数(vecextract(d,p)/*按排列顺序取所选数字p*/*u/*转换为数字*/)/*a素数?*/&&(f&&next(2)/*如果我们已经找到了另一个素数:不好;转到下一个数字选择*/||f=p/*否则将“发现”设置为等于当前排列*/))/*until()的结尾*/;f/*如果我们正好找到一个素数*/&&d[f[1]]/*第一位非零*/&&listput(L,vecextract(d,f)*u)/*将相应的数字添加到列表中*/,1/*仅考虑递增指数*/); Set(L)/*按递增顺序返回解决方案*/,/*else(n=1):返回1位素数(2,3,5,7)*/素数(4)/*相当于[2,3,5,7],但OEIS在每个“”后面插入一个空格,因此显式列表占用更多空间*/)/*如果n>1,则结束*/}\\返回所有包含n位数字的术语。-M.F.Hasler,2018年7月1日