localp={}functionp.factor(frame)number=tonumber(frame.args[1])productSymbol=frame.args['product']or'·'bold=frame.args['bold']andtruebig=frame.args['big']andtrueserif=frame.args['serif']andtrueprimeLink=frame.args['prime']andtruenumber=math.floor(number)ifnumber<2ornumber>1000000thenreturn'<strong class="error">number out of range</strong>'endresult=""currentNumber=numberpower=0--First take care of 2, the only even prime number.ifcurrentNumber%2==0thenresult='2'currentNumber=currentNumber/2power=1endwhilecurrentNumber%2==0docurrentNumber=currentNumber/2power=power+1endifpower>1thenresult=result..'<sup>'..power..'</sup>'..productSymbol..' 'elseifpower==1thenresult=result..' '..productSymbol..' 'end--Now do all odd numbers.prime=3whileprime<=math.sqrt(currentNumber)dopower=0ifcurrentNumber%prime==0thenresult=result..primecurrentNumber=currentNumber/primepower=1endwhilecurrentNumber%prime==0docurrentNumber=currentNumber/primepower=power+1endifpower>1thenresult=result..'<sup>'..power..'</sup>'..productSymbol..' 'elseifpower==1thenresult=result..' '..productSymbol..' 'endprime=prime+2endifcurrentNumber~=1thenresult=result..currentNumber..' '..productSymbol..' 'endifcurrentNumber==numberandprimeLinkthenreturn'[['..'prime'..']]'endresult=string.sub(result,1,-4)returnformat(result)endfunctionformat(num)ifboldthennum='<b>'..num..'</b>'endifserifthenifbigthennum='<span class="texhtml" style="font-size:165%">'..num..'</span>'elsenum='<span class="texhtml">'..num..'</span>'endelseifbigthennum='<span style="font-size:165%">'..num..'</span>'endreturnnumendreturnp