//OEIS A306746-Bert Dobbelaere的C++程序////“Goldbug数是一个2米的偶数,其中存在//2m的素数非除数(PND),2<p1<p2<p3<…<pk<m,因此//(2m-p1)*(2m-p2)*(2m-p3)**(2m-pk)只有p1、p2、p3,。。。,pk作为因子。一只金龟子//如果满足该性质的最大子集的大小为k,则称该数为k阶。”//关于算法://我们通过迭代消去包含//上述产品中不允许的因素。//首先,所有小于2m_max(M2MAX常数)的奇数都是因子,因子和素数是//存储在表中。该算法最初将所有奇数素数<m标记为“允许”,所有//其他<2m的整数为“不允许”,然后从允许集中删除2m的因子。//每个“消除回合”,如果(2m-p),任何“允许的”质数p都将变为“不允许的”//包含至少一个不允许的因子。只要//列表中至少删除了一个质数。如果结果列表为非空,则2m为//Goldbug编号和“允许列表”的长度是它的顺序。//实施说明://程序包含一些大型静态分配数组。//潜在内存改进://-只存储奇数值将使内存需求减半。//-只有在初始化期间才能访问m以下数字的因子分解//将因子存储在矩形数组中而不是使用指针表可以消除//间接级别。候选集中的素数有两种表示方式:一次//在布尔主数组中(最适合随机访问),是简单数组的两倍//给定时间的“允许”素数(针对顺序访问进行了优化)。#包括#包括#包括#定义M2MAX 30000000//“2m的最大值”#define MAXFACTORS 8//支持(MAXFACTORS-1)不同的奇数素数因子:值8适用于2m<1.115e8。#define MAXPRIMES(M2MAX/5)//高估M2MAX以下的素数(为大型M2MAX提供默认ok)#define LAST 0xFFFFFFu//最后一个因子标记typedef无符号u32;//初始化期间填充的数组:u32系数[M2MAX][MAXFACTORS];//数的奇素因子0)//最大集为非空{//我们发现订单号为Goldbug。printf(“%u是订单%u的Goldbug编号。\n最大集合:[”,m2,allowedcount);对于(u32 k=0;k<(srccnt-1));k++)printf(“%u,”,src[k]);printf(“%u]\n\n”,src[srccnt-1]);}}整型main(){initfactors();对于(u32 m2=2;m2<=M2MAX;m2+=2){如果(m2%100000==0)printf(“……(%u)\n”,m2);求解(m2);}printf(“完成搜索Goldbug编号<=%u.\n”,M2MAX);返回0;}