# Author: Manfred Scheucher # Date : 01.06.2015 from sys import argv def partition(n,maxk=None): assert(n>=0) if n == 0: yield [] else: if maxk==None: maxk=n for k in range(min(n,maxk),0,-1): for P in partition(n-k,k): yield [k]+P def intersection_valid(A,B): inter = set(A) & set(B) return len(inter) == 1 def conj_partition(n,P): cP = [len([p for p in P if p>i]) for i in range(n)] return [p for p in cP if p > 0] minn = int(argv[1]) maxn = int(argv[2]) if len(argv)>2 else minn for n in [minn..maxn]: ct = 0 for P in partition(n): cP = conj_partition(n,P) if intersection_valid(P,cP): ct+=1 print n,ct