# (Python) # Returns n's prime factors in increasing order def factors(n): out,k=[],2 while n>=k*k: while n%k==0: out.append(k) n//=k k+=1+(k&1) return(out if n<2 else out+[n]) # Find k1...km such that k1!k2....km!=p, ki1: continue # f2 has factors not in prod if lfac[k1]==prod: return([k1]+[1]*(k-k1)) s=exki(k-k1,k1,prod//lfac[k1],l2,lfac) if s: return([k1]+s) # Finds smallest k such that k=sum(k1,... km) # and k!= n x (k1!k2!...km!) def imult(n,lfac): if n==1: return([1]) bg=n<<1 if (lfac[-1]>bg): inf=2 sup=len(lfac)-1 while(sup-inf>1): mid=(inf+sup)>>1 if lfac[mid]>bg: sup=mid else: inf=mid k0=inf+(lfac[inf]=len(lfac)): lfac.append(lfac[-1]*(k+1)) if lfac[k]%n==0: # k! so that k!/n integer prod=lfac[k]//n # Prod=k1!k2!...kp! w p