10 'poly.ub 20 L%=1000:dim A%(L%),B%(L%),W%(L%) 30 input N% 40 ' 50 ' main loop 60 ' 70 Ka%=0:A%(0)=1 80 for D%=1 to N% 90 if or{N%@D%>0,moeb(N%\D%)<=0} then 110 100 gosub 210:gosub 250 110 next D% 120 for D%=1 to N% 130 if or{N%@D%>0,moeb(N%\D%)>=0} then 150 140 gosub 210:gosub 360 150 next D% 160 gosub 480:' print 170 print:goto 30 180 ' 190 ' set (x^d - 1) 200 ' 210 Kb%=D%:B%(Kb%)=1:B%(0)=-1:for I%=1 to Kb%-1:B%(I%)=0:next I%:return 220 ' 230 ' w = a * b 240 ' 250 Kw%=Ka%+Kb%:for I%=0 to Kw%:W%(I%)=0:next I% 260 for I%=0 to Ka% 270 for J%=0 to Kb%:K%=I%+J% 280 W%(K%)=W%(K%)+A%(I%)*B%(J%) 290 next J% 300 next I% 310 Ka%=Kw%:for I%=0 to Ka%:A%(I%)=W%(I%):next I%:return 320 return 330 ' 340 ' w = a / b 350 ' 360 Kw%=Ka%-Kb% 370 for I%=Kw% to 0 step -1 380 W%(I%)=A%(I%+Kb%)\B%(Kb%) 390 for J%=I% to I%+Kb% 400 A%(J%)=A%(J%)-W%(I%)*B%(J%-I%) 410 next J% 420 next I% 430 Ka%=Kw%:for I%=0 to Ka%:A%(I%)=W%(I%):next I%:return 440 return 450 ' 460 ' pretty print 470 ' 480 for I%=Ka% to 0 step -1 490 if A%(I%)<>0 then cancel for:goto 510 500 next I% 510 if I%=0 then print A%(I%);:return 520 if A%(I%)<>1 then print A%(I%); 530 print "x"; 540 if I%>1 then print "^";cutspc(str(I%)); 550 for J%=I%-1 to 0 step -1 560 ' coefficient 570 if A%(J%)=0 then 660 580 if A%(J%)>1 then print "+";cutspc(str(A%(J%))); 590 if A%(J%)=1 then print "+"; 600 if A%(J%)=-1 then print "-"; 610 if A%(J%)<-1 then print "-";cutspc(str(abs(A%(J%)))); 620 if J%=0 then print cutspc(str(abs(A%(0)))); 630 ' term 640 if J%>0 then print "x"; 650 if J%>1 then print "^";cutspc(str(J%)); 660 next J%:return