Given an integer N, the task is to find out M increasing numbers such that the sum of M numbers is equal to N and the GCD of these M numbers is maximum among all possible combinations (or series) of M numbers.
Note: If two or more such series are possible then return the series which has smallest first term.
Example 1:
Input: N = 24, M = 3
Output: 4 8 12
Explanation: (3, 6, 15) is also a series 
of M numbers which sums to N, but gcd = 3
(4, 8, 12) has gcd = 4 which is the maximum
possible.
Example 2:
Input: N = 6, M = 4
Output: -1
Explanation: It is not possible as the 
least GCD sequence will be 1+2+3+4 which
is greater then n, hence print -1.
Your Task:  
You dont need to read input or print anything. Complete the function M_sequence() which takes N and M as input parameter and returns th series of M numbers and if there are no series exist returns -1.
Expected Time Complexity: O(sqrt(n))
Expected Auxiliary Space: O(n)
Constraints:
1 <= N <=10^{5}

Source: geeksforgeeks | Difficulty: MEDIUM
Tags: Mathematics

Starter code: #User function Template for python3
class Solution:
	def M_sequence(self, N, M):
		# code here


Solutions:
import math

class Solution:

	def M_sequence(self, N, M):
		cnt = (1 + M) * M // 2
		mgcd = -1
		for i in range(int(math.sqrt(N)), 0, -1):
			if N % i == 0:
				d = N // i
				if d * cnt <= N:
					mgcd = max(mgcd, d)
				if i * cnt <= N:
					mgcd = max(mgcd, i)
		if mgcd == -1:
			print(-1)
			return []
		ans = []
		i = 1
		while len(ans) < M - 1:
			ans.append(i * mgcd)
			N -= i * mgcd
			i += 1
		ans.append(N)
		return ans