arr
.index
to store the indices of the elements in arr
.dp
of the same length as arr
to store the number of trees with each element as the root.v
, set dp[v]
to 1 (since each element can form a tree by itself).v
, iterate over the array again to find all pairs x
and y
such that x * y == v
.dp[x] * dp[y]
to dp[v]
.dp
to get the total number of trees.10^9 + 7
.