Python Peaks
def peaks(a: list[int]) -> int:
    n = len(a)
    if n <= 2:
        return 0

    total = [0] * n
    last = -1
    dist = 0
    for i in range(1, n - 1):
        total[i] = total[i - 1]
        if a[i] > a[i - 1] and a[i] > a[i + 1]:
            dist = max(dist, i - last)
            last = i
            total[i] += 1

    total[n - 1] = total[n - 2]
    if total[n - 1] == 0:
        return 0

    dist = max(dist, n - last)

    for i in range(dist // 2 + 1, dist):
        if n % i == 0:
            last = 0
            j = i
            while j <= n:
                if total[j - 1] <= last:
                    break
                last = total[j - 1]
                j += i
            if j > n:
                return n // i

    last = dist
    while n % last:
        last += 1

    return n // last

This finds the peak positions, then tests how many equal blocks can each contain at least one peak.