发件人:John P.Linderman2008年2月28日palin.pl[包含在这个文件a135549.txt中]是用于生成序列的perl脚本,并生成palin.html。这可以通过跑步来实现pod2html palin.pl>palin.html如果文档发生更改。palin.html[现在称为a135549.html]是palin.pl及其选项的HTML描述认可。这里有一节有一些分析。-------palin.pl的开始-----------------------#!/usr/bin/perl-w使用严格;我的$HasNoPalins=0;#设置为1以仅报告没有回文基的N我的$StartAt=0;#需要考虑的最小N我的$StopAfter;#要考虑的最大N。请参阅下面的STOPAFTER。我的$Leading0s=0;#设置为1以允许前导0我的$BaseDelta=-1;#仅考虑基数严格小于N+BaseDeltamy$Verbose=0;#设置为1以获得更多细节我的$Sep=“”;#分隔术语的内容。“\n”或“,”可能适用$HasNoPalins=$ENV{HasNoPalins}如果(存在($ENV}HASNOPAINS}));$StartAt=$ENV{StartAt}if(存在($ENV{STARTTA}));$StopAfter=存在($ENV{StopAfter})$ENV{STOPAFTER}:$HasNoPalins?1000 : 100;$Leading0s=$ENV{Leading0s}if(存在($ENV}LEADING S}));$BaseDelta=$ENV{BaseDelta}+0,如果(存在($ENV}BASEDELLA}));$Verbose=$ENV{Verbose}if(存在($ENV{Verbose}));$Sep=$ENV{Sep},如果(存在($ENV{Sep{));$Verbose=0 if($HasNoPalins);#细节太难看了#N作为基数B的数组。B>1子Nbase B{my$N=班次;我的$B=轮班;我的@a=();而($N>0){推送(@a,$N%$B);$N=整数($N/$B);}返回反向@a;}#n是以b为底的回文吗?是1,否0子is_palin{my($n,$b)=@_;my@p=NbaseB($n,$b);我的($i,$j);if($Leading0s){弹出(@p)while(@p&&($p[-1]==0));}对于($i=0,$j=$#p;$i<$j;++$i,--$j){返回0,除非($p[$i]==$p[$j]);}返回1;}次干管{my($i,$j,$p,$t,$topbase);我的$sep='';对于($i=$StartAt;$i<=$StopAfter;++$i){$p=0;$topbase=$i+$BaseDelta;对于($j=2;$j<$topbase;++$j){$p+=$t=is_palin($i,$j);if($Verbose&&$t){打印($j,“:”,加入(“”,NbaseB($i,$j)),“\n”);}}if($HasNoPalins){如果($p==0){打印($sep,$i);$sep=$sep;}}elsif($详细){打印($i,“:”,$p,“\n\n”);}其他{打印($sep,$p);$sep=$sep;}}打印(“\n”);}main();=head2 In有多少个基数是B回文?此脚本生成与问题相关的序列正整数B所在的基数是一个回文。B类当以一元形式表示时,将是一个回文,但B<1>不是合法的基地,因此我们感到担忧仅以大于1的整数为基数。B类将是任何基的“单数字”回文大于B,所以我们不会考虑大于B的基数.底座B和底座B-1为特殊情况。当它们足够大成为合法基地时,B类以B为基数,B<10>,和B<1 1>在基础B中-1.后者总是一个回文,前者是回文,如果(且仅当)我们允许前导B<0>,将其视为B<0 1 0>。因此,我们默认只考虑基数B1<B<N-1当我们计算B的基数时是一个回文。包括基础B的影响-1或B就是增加在它们是合法基数的情况下,按一定数量进行计数。=head2选项有几个变量影响回文的计数方式并进行了报告。它们可以通过使用I设置,它是这些环境变量的名称我们将用于描述效果。=头3哈斯诺帕林默认情况下,我们报告每个B,基数B1<B<N-1其中B是一个回文。通过设置B,相反,我们报告的是那些B其计数为B<0>。读者可能喜欢为B证明这一点大于B<6>,只报告质数(但不是所有质数)。参见L进行讨论。=头部3 STARTAT我们默认以B开头B<0>时。但是,对于B小于B<3>1<B<N-1不包含基数,因此相应的计数将始终为0。您可以更改B的初始值使用B.例如(假设,正如我们将贯穿始终的那样,您可以在命令行上设置环境变量,这个脚本叫做B)STARTAT=3 palin.pl将在B开始=B<3>。=头部3挡板默认情况下,B的最后一个值我们认为是B<100>,当B时,B<1000>为B<1>。如果B定义,它确定B的最后一个值待考虑。=头3引线G0S默认情况下,我们不计算它的基数需要提供一个或多个前导B<0>以生成B回文。如果B是B<1>,我们我计算这样的基数。=头部3 VERBOSE通过设置B,可以打印其他信息。当B是B<1>,因为没有太多其他的报道。它会更改默认报告以显示基础,和那些碱基中的回文,其中B被认为是回文,以及B还有伯爵。=头部3 SEP默认报告中的计数用空格隔开。您可以指定要用于分隔的字符串计数到B.=头部2 BASEDELTA我们默认只允许基数B1<B<N-1计算基数时,其中B被认为是回文。上限由B相加确定值,默认为B<-1>,B。您可以扩展或收缩通过修改B的范围值。通过使其大于B<-1>来扩展它,对计数没有任何有趣的影响,它只是增加一个常量值(任何扩展都会使B报告特别无趣)。=头部2示例下面是使用上述选项的几个示例。命令后立即显示输出。=头部3 B1我们使用B和B限制B设置为单个值,B<12>。所有报告的都是B<1>,即基数1<B<12-1其中B<12>是回文。如果您对更多内容感兴趣你可以做到=头部3 B5: 2 212: 1现在你可以看到B<12>是以B<5>为基数的B<22>,以及B<12>的计数。提供隐含引导B的效果通过以下方式证明=头部3 B2: 1 1 0 03: 1 1 04: 3 05: 2 26: 2 012: 5虽然基B<2>中的B<1 1 0 0>不是回文,如果我们提供两个领先的B<0>s,则变为1匹配后面的B<0>s。=头部3 B0 0 0 0 0 1 0 1 1 1 2 0 1基数B的计数1<B<N-1其中B是B的回文在B<0>和B<12>之间。=头部3 B0 0 0 1 1 2 1 2 2 2 3 1 2基数B的计数1<B<N其中B是B的回文在B<0>和B<12>之间。更改B从默认值B开始,允许以B为基数-1,而且,自B起是B<1 1>基础B-B为1大于B<2>,这些项的计数增加了B<1>。设置B到B<1>将允许基数B成为考虑过,但B以B为基数,B<10>,这不是回文(除非我们设置为B至B<1>),所以对计数没有影响。高于B<1>,B添加B中的基数是一个“单数字”回文,B,只要B+B类-B<1>等于或大于B<2>,因此是一个有效的基数。我们不考虑B增加的影响下面的序列特别有趣。=头部3 B0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 2, 0, 1使用逗号和空白分隔序列中的术语。=头部3 B0, 0, 0, 0, 1, 1, 2, 1, 3, 2, 4, 0, 5计数回文时允许前导B<0>秒我永远不会当然很重要,但它显然增加了某些条款的计数。=头2 HASNOPALINS和复合数=头部3 B0 1 2 3 4 6 11 19 47 53 79 103 137 139 149 163 167 179在B<6>之后,所有项都是质数。这不是偶然。大于B<6>的复合数有一个基数它们以回文形式出现。首先考虑完美正方形,所以B是B**B<2>N=F**2=F*F=(F-1+1)*(F-1/1)=(F-1)**2+2*(F-1所以B将是B<1 2 1>基础B-1只要B大于B<3>(因此B<2>是以B为基数的“数字”-1).这意味着所有大于B<9>的完美正方形可以用回文来表示,而B<9>本身是B<10 0 1>基B<2>,所以所有的完美平方都大于B<6>有回文基。考虑下一个复合数B其最小素因子为B

,所以B是B

*B类。我们已经处理了B类

等于B,所以我们可以假设B

严格小于B.罐头B

等于B-1? 是的,但是B

或B必须是偶数,和B

是I吗素因子,所以B

必须为B<2>并且B类必须是B<3>,而我们只关心B大于B<6>。所以我们可以假设B-1严格大于B

.所以N=P*F=P*(F-1)+P所以B是B

底座B-1.因此B复合数大于B<6>有回文基。顺便说一句,B对素数没有影响由B报告.如果B

没有回文基础当B是on,那么它肯定没有回文基不带B,所以是B无法添加新素数。还有任何我基数B(小于B)B允许必须有一个以B<0>结尾的回文,这意味着B是B的倍数,因此,不是质数。所以B无法删除任何素数。