BZOJ-1025 游戏

排数等于每个循环节的长度的lcm+1

也就是说我们要求出一列数(a1,a2,a3,a4……)的lcm有多少种(保证数的总和为N)

设lcm为C,则将C分解质因数:C=a1^x1+a2^x2+a3^x3……

易证(a1^x1,a2^x2,a3^x3……)为符合lcm=C的总和最小的情况

 

所以我们先筛素数,然后w[i,j]表示总和为i,且其中的数的最大质因数不大于Prime[j]

DP方程:w[i,j]=w[i][j-1]+∑w[i-Prime[j]^k][j-1](i>=Prime[j]^k)

记得边界问题和int64。

 

【Code】

 

posted @ 2014-11-25 20:44  NanoApe  阅读(122)  评论(0编辑  收藏  举报
AmazingCounters.com