题目大意:给出n个数,ai,然后取这n个数的积为m,计算将m分解成n个因子,问有多少种有序因子序列。
解题思路:n为500,ai的上限为1e9,所以要表示m是完全不可能的,但是记录下m的因子个数是完全可以的,因为ai就是m的因子,所以把ai分解成质因子然后离散保存个数。
接下来枚举每种因子的分配情况,假如因子t有k个,那么将k个因子分配到n个位置的方式数即为C(k+n-1, n-1),这是组合数学中的隔板法,要将m个糖果分成n份的方法数即为C(m-1,n-1),即将糖果排成一排,然后枚举任意两个糖果之间放一个隔板,(这样会保证说每一份都会有至少一个糖果,但是这道题有点不同,有些数可能没有分到这个因子);k+n-1个位置,选n-1个位置放隔板,其他的就是因子,然后每两个板之间的因子个数就对应着某个数含有该因子的个数。
#include
#include
#include
#include