永野護さんへのお返事です。
別解 多項定理
PUBLIC NUMERIC N
LET N=4 !次数 ※
LET P=5 !べき乗数 ※
PUBLIC NUMERIC B(0 TO 100) !展開した多項式
DIM A(N+1) !{p,q,r,s,t}の並び
CALL IntegerPartition(P,N+1,1, A)
FOR i=N*P TO 0 STEP -1
PRINT B(i);"* x ^";i
NEXT i
PRINT
END
!多項定理
! (2*x^4+5*x^3+3*x^2+6*x+7)^5 の展開
! FACT(p+q+r+s+t)/(FACT(p)*FACT(q)*FACT(r)*FACT(s)*FACT(t)) * (2*x^4)^p * (5*x^3)^q * (3*x^2)^r * (6*x)^s * (7)^t
EXTERNAL SUB PolyExpand(A(),P) !多項式の展開に多項定理を当てはめる
DIM Q(0 TO N)
DATA 2,5,3,6,7 !2*x^4+5*x^3+3*x^2+6*x+7 ※
FOR i=N TO 0 STEP -1
READ Q(i)
NEXT i
LET w=1 !(p! * q! * r! * s! * t!)の計算
FOR i=1 TO N+1
LET w=w*FACT(A(i))
NEXT i
LET c=FACT(P)/w !前半部分 (p+q+r+s+t)!/(p! * q! * r! * s! * t!)
LET x=0 !後半部分を加味する
FOR i=1 TO N+1
LET c=c*Q(i-1)^A(i) !係数
LET x=x+(i-1)*A(i) !べき乗
NEXT i
LET B(x)=B(x)+c !記録する
END SUB
EXTERNAL SUB IntegerPartition(n,d,s, A()) !自然数nをd分割する
IF d=1 THEN
LET A(s)=n
MAT PRINT A;
CALL PolyExpand(A,s) !多項式を展開する
ELSEIF d>1 THEN
FOR i=0 TO n
LET A(s)=n-i
CALL IntegerPartition(i,d-1,s+1, A)
NEXT i
END IF
END SUB