#!/opt/mathemics/bin/perl-w使用严格;使用数学::Pari qw{nextprime factoring};$|=1;=头1 A249064(和A090252)A249064是词法上第一个正整数序列,因此每个元素a(n)与下一个元素a(n)互素。A090252是词法上第一个正整数序列,因此每个元素a(n)与接下来的n个元素互素。用法:不带参数运行以计算A249064,或将“-n”设置为计算A090252。=切割我的A090252美元;if(@ARGV&&$ARGV[0]eq'-n'){A090252美元=1;}#到目前为止的序列,以及已经使用的整数的位向量my($index,$seen,@seq)=(0,'');#下一个未使用的素数我的$nextp=2;#通过记住索引来跟踪共有性要求#被抑制的素因子再次变为自由因子,而当前的自由因子列表#基本因子我的(%pend,%free);#初始化存储值(1,[]);元素:while(1){#将其共主性的任何素因子还原到%空闲列表#要求已过期my$depend=delete$pend{scalar@seq};@{$depend||[]}的$free{$_}=1;N: 对于我的$N(1..$nextp-1){#如果序列中已经包含$n,则跳过如果vec为下一个N($seen,$N,1);#简单但缓慢:用自由素数试算除法几乎可以#肯定更快my$primes=素数($n);for(@$primes){#如果我们可以被任何当前被抑制的素数整除,则跳过下一个N,除非$free{$_};}#我们有一个结果存储值($n,$primes);下一个元素;}#我们什么也没发现,选择下一个素数存储值($nextp,[$nextp]);$nextp=下一个素数($nextp+1);下一个元素;}子存储值{my($value,$primes)=@_;push@seq,$value;++$index;vec($seen,$value,1)=1;printf“%s%s\n”,$index,$value;#现在必须为下一个a(n)项抑制这些素因子#(如果计算A090252,则为下n项)。我的$suppress=$A090252$索引:$value;按@{$pend{$index+$suppress}},@$primes;删除@free{@$primes};}#返回不同素数除以n的数组#(需要进行一些回避,以避免数学::Pari内存管理错误#libpari最新版本。)次素数{我的($)=@_;my($p,$pp)=@{因子($n)};$pp=未定义;my$r=[map“$_”,@$p];$p=未定义;返回$r;}