/* REXX FACTORS Determine factors of a supplied number. */ arg argline /* pro-forma quick-start */ address TSO arg parms "((" opts opts = Strip(opts,"T",")") parse var opts "TRACE" tv . parse value tv "N" with tv . rc = Trace("O"); rc = Trace(tv) parse value "0" with sum faclist parse var parms num . do fac = 2 to num /* */ if fac**2 > num then leave /* */ if num // fac = 0 then do hifac = num / fac if hifac = fac then do hifac = '' sum = sum + fac end else , sum = sum + fac + hifac faclist = faclist fac hifac end /* evenly divisible */ end /* fac */ faclist = STRSORT( faclist ) say "Factors of" num "are" faclist say "and their sum is" sum exit /*@ FACTORS */