#357 = CIRCLE ( 'NONE', #49, 20.00000000000000355 ) ;
import itertools
def Gen(s, k, m, cur): # разбить S на K слагаемых от 1 до M
if m == 1:
if s != k: return
new_list = list(cur)
new_list.extend([1]*k)
yield from set(itertools.permutations(new_list))
#yield new_list # если порядок не важен
return
can_fit = min(s//m, k, (s-k)//(m-1))
need_take = max(0, s-k*(m-1))
new_list = list(cur)
new_list.extend([m]*need_take)
for i in range(need_take, can_fit+1):
yield from Gen(s-m*i, k-i, m-1, new_list)
new_list.append(m)
print(Gen(227, 52, 7, []))
kol+= m/j-(n-1)/j
то понял? Дальше разбиваем на 2 отдельные суммы. Одну с m, другую с n-1. kol += (m/j) +j*(m/j- m/(j+1)) ;