<p>Given an integer array <code>nums</code> and an integer <code>k</code>, return <em>the number of <strong>subarrays</strong> of </em><code>nums</code><em> where the least common multiple of the subarray&#39;s elements is </em><code>k</code>.</p>

<p>A <strong>subarray</strong> is a contiguous non-empty sequence of elements within an array.</p>

<p>The <strong>least common multiple of an array</strong> is the smallest positive integer that is divisible by all the array elements.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [3,6,2,7,1], k = 6
<strong>Output:</strong> 4
<strong>Explanation:</strong> The subarrays of nums where 6 is the least common multiple of all the subarray&#39;s elements are:
- [<u><strong>3</strong></u>,<u><strong>6</strong></u>,2,7,1]
- [<u><strong>3</strong></u>,<u><strong>6</strong></u>,<u><strong>2</strong></u>,7,1]
- [3,<u><strong>6</strong></u>,2,7,1]
- [3,<u><strong>6</strong></u>,<u><strong>2</strong></u>,7,1]
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [3], k = 2
<strong>Output:</strong> 0
<strong>Explanation:</strong> There are no subarrays of nums where 2 is the least common multiple of all the subarray&#39;s elements.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums.length &lt;= 1000</code></li>
	<li><code>1 &lt;= nums[i], k &lt;= 1000</code></li>
</ul>

import numpy as np
class Solution:
    def prime_factors(self, n):
        factors = []
        # Start with the smallest prime number 2
        while n % 2 == 0:
            factors.append(2)
            n //= 2
        # Now check for odd factors starting from 3
        for i in range(3, int(n**0.5) + 1, 2):
            while n % i == 0:
                factors.append(i)
                n //= i
        # If the remaining number is a prime number greater than 2
        if n > 2:
            factors.append(n)
        return factors

    def subarrayLCM(self, nums: List[int], k: int) -> int:
        # start = 0 
        # end = 0 
        # arr = []
        numArr = 0
        
        # curLCM = 0
        # while end < len(nums):
            
        #     if not arr: 
        #         curLCM = nums[end]
        #     if curLCM == k:
        #         numArr += 1
        #         end += 1
        #         if end < len(nums):
        #             curLCM = math.lcm(curLCM, nums[end])
        #     elif curLCM < k:
        #         end += 1
        #         if end < len(nums):
        #             curLCM = math.lcm(curLCM, nums[end])
        #     else:



            
        #     # lcm = np.lcm.reduce(arr)
        #     # if np.lcm.reduce(arr) == k:
        #     #     numArr += 1
        #     #     arr.pop(0)
        #     # elif lcm < k:
        #     #     end += 1
        #     #     if end < len(nums):
        #     #         arr.append(nums[end])
        #     # else:
        #     #     arr.pop(0)

        # return np.lcm.reduce(nums)
        #maybe this is just a greedy problem?
        #try each subarray with each element as the start
        for i in range(len(nums)):
            curLCM = nums[i]
            if curLCM == k:
                numArr += 1
            for j in range(i + 1, len(nums)):
                
                curLCM = math.lcm(curLCM, nums[j])
                if curLCM == k:
                    numArr += 1
        return numArr
        
1110