13 lines
492 B
Text
13 lines
492 B
Text
fcn factors(n){ // Return a list of factors of n
|
|
acc:=fcn(n,k,acc,maxD){ // k is 2,3,5,7,9,... not optimum
|
|
if(n==1 or k>maxD) acc.close();
|
|
else{
|
|
q,r:=n.divr(k); // divr-->(quotient,remainder)
|
|
if(r==0) return(self.fcn(q,k,acc.write(k),q.toFloat().sqrt()));
|
|
return(self.fcn(n,k+1+k.isOdd,acc,maxD))
|
|
}
|
|
}(n,2,Sink(List),n.toFloat().sqrt());
|
|
m:=acc.reduce('*,1); // mulitply factors
|
|
if(n!=m) acc.append(n/m); // opps, missed last factor
|
|
else acc;
|
|
}
|