当初从30分做到50分后用DP做50分然后WA50分最后终于AC(T^T)
设F[j,i]表示有i个质因数,有j个因数的最小数。
初始化:
F[1,i]=2^(i-1) (i=1~n)
用F[j,i]去维护F[j+1,i*(k+1)] (i=1~n j=1~trunc(ln(i)/ln(2)) k=1~n div i-1 且 F[i,j]>0)
即F[j+1,i*(k+1)]=max(F[j+1,i*(k+1)],F[j,i]*P_j+1^k)
P_i表示第i个质数,开到20就可以了。
100分N=200000
D[i]表示有i个因数时能构成的最小数。
在计算F[j,i]时更新D[i]。
之后从后往前枚举,每找到一个比原最小数小的数,就把该数加进答案序列里。
然后统计范围内的约数国王个数,最后输出序列。