小于50的素数共有15个:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47。
前51行中的无平方因子数只可能是这些素数的组合,共有个,计算出所有这些数,放入一个集合。
前51行中最大的数是,用标准库完全可以计算,因此遍历所有这些组合数,逐一检查是否在上述集合中,去重后汇总即得。
注:以下代码为Python3,因math.prod和math.comb均为Python3的新增函数。
import math,itertools
p=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47]
sf=set([math.prod(c) for k in range(1,15) for c in itertools.combinations(p,k)])
print(1+sum(set([math.comb(n,k) for n in range(2,51) for k in range(1,n//2+1) if math.comb(n,k) in sf])))
|