这个网站是由捐款支持的OEIS基金会.

用户:M.F.Hasler/A307511

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

第一个值和定义

顺序A307511飞机从0,1,2,222,22,2222,3,120,10,234开始。。。

下一个项是之前没有使用的最小的a(n+1),因此它与a(n)的连接具有尽可能少的不同“子数”,严格地大于上一个项。这里,a子编号是一个数字子串:忽略前导零,数字/字符必须连续取自完整字符串。

示例

  • a(0)=0和a(1)=1:“0”。“1”=“01”有2个子编号:0和1(=01)。
  • a(2)=2:“1”。“2”=“12”有3个子编号:1、2和12。
  • “2”。“222”=“2222”有4个不同的子编号:2、22、222和2222。如果我们附加任何一个数字(或22),它会再次产生3个不同的子串,不比以前多。如果我们将另一个数字追加两次(例如,11=>211),我们将得到5个不同的数字子串,这不是最小值。
  • “222”。“22”=“22222”有5个不同的子编号:2、22、222和2222。
  • “22”。“2222”=“2222222”有6个不同的子编号:2、22、222、2222、22222和22222。
因为“2”和“22”已经被使用,所以不可能产生一个带有7或8个子编号的数字。
“0”和“1”也出现在前面,所以下一个可能的最小项是a(6)=3:
  • “2222”。“3”=“22223”有9个不同的子编号:2,22,2222,2222和3,23,223,2223,22223。

程序

C++

#include<bits/stdc++.h>
 using namespace std;
 int debug=0;
 char buf[99];
 typedef unsigned long long ull;//这是一个替代变量,使用字符串,用于双重检查。
 int ns(char*s){set<ull>s;
//如果(debug>2)cerr<<“输入n(),使用s=“<s<<endl;
 for(;*s;+++s){ull n”=*s-'0';
 s.insert(n);
 if(n)
 for(char*e=s+1;*e;++e)
 s.insert(n=n*10+(*e-'0');
}
 return s.size();
}
//我们可以假设n至少有两个非零位数。我们将永远不会有N=10 ^ k。
 INTN N(ULN){set<ull>S;;//如果(调试>2)cerr<“进入N()与S=“<<S<<<endl;;for(ulm M=1;M<=N;N;){;ull O=M;M*=10;ULN=N%M;M;如果(N<O)//这个N以前已经处理过了,小M;S.insert(0);
 else 
 else;做S.insert(N);
 while(N//=N/=M=M;M;S.INSERS.insert(N);;10);
}
返回S.size();
}
 main(int argc,char**argv){
 int N=2;vector<ull>a={1};set<ull>U;/*“used”数字*/
 vector<int>给定的_个值;ull STOP=0;
 multiset<ull>jump={/*5,5,19,23,31,43*/};/*使用此索引项后,再增加一次*/
对于(int i=0;++i<argc;)
开关(*argv[i]='-'?*++argv[i]:*argv[i]){case'a':
给定的索引。向后推(atoi(isdigit(argv[i][1])?argv[i]+1:argv[++i]);
给定的_值。向后推(环礁(argv[+i]));
中断;
 case'd':调试=(argv[i][1]?atoi(argv[i]+1):1);break;
 case'n':char*s=(argv[i][1]?argv[i]+1:argv[++i]);
 cout<<”n(“<<s<”)=“<<n(环礁))<<”(方法1:基于整数)\n“;
 cout<<”=?<<<ns(s)<<(方法2:以字符串为基础)\n“break”;“case'h”为printf(“用法:%s[选项][跳跃]其中选项之间的选项是:\n“\n”\t[-]d<调试调试<u水平>|[-]{h[elp]|u[圣人][圣人]};[[-]n<数字>[数字>\n”;“\n 
”的“\t[-]a<索引><价值的价值>[除除除此之外,[除此之外,[除此之外,[[公司]q[uit]他们的124;[[他们]他们的[顶部]<价值][价值][[[[[[[[[;“破折号是可选的。选项d,n,s的参数前面可以加空格。\n“
”Option-nx打印给定x的n(x)(不同子串编号的数目),使用两个不同的方法。\n“
”选项允许指定给定索引的结果(旁路计算)。\n“
”当达到给定值时,-s选项允许停止(结束计算并退出)。\n“
”其他参数[JUMPS]将给定索引中n(x)的搜索下限增加+1。\n“
,argv[0]);//拖放并退出
 case'q':case'x':退出(0);
 case's':STOP=环礁(isdigit(argv[i][1])?argv[i]+1:argv[++i]);break;《案例“j”:如果(isdigit(argv[i[i][1]))++argv[i];else++i];默认:jump.insert(Atall(argv[i[i]));//允许以附加的跳跃作为参数,作为参数添加额外的跳跃,作为参数
 
 for(;;;;){ulan ulan=a.back();U.insert(an);////向“用过的数字”添加;打印时:;//Intl L=Sprintff(buf,“%llu”,lu)的一年期;printf(printf,“%llu”,一年)的时候,;(prin%d(N=%d)*/%llu“”,a.size(),N,an);fflush(stdout);
 if(an==STOP)返回0;//对于计时或其他时间
//需要更多的子字符串。
 N+=1+jump.count(a.size());
 if(!给定的_indexes.empty()&&a.size()+1==给定的索引[0]){
 if(debug)cerr<<“/*使用给定值:*/”,fflush(stderr);uindexes.erase(given_indexes.begin());a.push_back(给定_values.begin());
//在这里我们可以检查是否需要增加N 
 continue;//转到下一个索引。
}
 restart:
 auto next_Used=U.begin();//下一个要跳过的数字
如果所有给定长度的数字都导致n值大于n 
//那么我们确定当我们增加数字的长度
 int n_min=int_MAX;ull next_MAX=10//这是下一个较长的整数
前缀=an*next_MAX;//避免这个循环中的乘法在(ull k=1;;++k){如果(k==next_MAX){/不经常发生,那么在
 if(n_min>n&&()!U、 计数(k/9*(an%10))| | n(an*next UMAX+k/9*(an%10))>n)){;//如果“n次最后一位数的n次”是在U;+++n;CER<<<“/*增加n至“<<n<”*/“*/”,FFRUSH(stderr);
 goto重启;重新启动;
 
 
 
 NEXTU MAX*=10;n UMIN=INT MAX;前缀*=10;10;
若(调试>1)cerr<“/*下一个下一个<<n<“//*下一*下一个<_MAX=“<<next_MAX<<”*/\n“;}
 if(k==*下一次使用){//number already used 
 if(++next_used==U.end())
 next_used=U.begin();//并且它将不再相等
}else{///sprintf(buf+L,“%llu”,k);
 int n_buf=n(前缀+k);
 if(n_buf==n){a.push_back(k);break;/*找到!*/}
如果(n_buf<n_min){n_min=n_buf;/*k_min=k;*/}
}}}}

平价

退房A307511飞机最新版本。