def count_sum(max, total, dice): count = 0 if total < 1 or total > max*dice: return 0 if dice == 1: if 1 <= total <= max: return 1 else: return 0 for last in range(1, max+1): count += count_sum(max, total-last, dice-1) return count v = [count_sum(10,k,3) for k in range(32)] print v t = sum([a*a for a in v]) print t, t/13 def delta(x,y): return 1 if x==y else 0 vv = [0]*31 ww = [0]*31 for i in range(10): for j in range(10): for k in range(10): total = i+j+k vv[total] += 1 if i != 0: ww[total] += 1 print vv print ww t = sum([a*b for a,b in zip(vv, ww)]) print t, t/13 t = sum([a*a for a in vv]) print t, t/13