Bill Allombert on Thu, 18 Jul 2019 16:48:29 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Help understanding generating functions, (partitioning n into k parts) |
On Thu, Jul 18, 2019 at 05:31:20PM +0300, Дмитрий Рыбас wrote: > Mike, > > Thanks to user *mihaild *on russian scientific forum dxdy.ru , here is the > best (so far), iterative (non-recursive), low-memory (one vector of lenght > n) algorithm for partitions function p(n,k) calculation: > > pnk(n,k)= > { > my(M=vector(n),res=0); > M[1]=1; > for(i=1,k, > for(j=1,n-2*i+1, > M[i+j]+=M[j]); > res+=M[n-i+1]); > return(res); > } > > Try it! Thanks! This is the version with type annotation for GP2C: pnk(n:small,k:small)= { my(M=vector(n),res:int=0); M[1]=1; for(i:small=1,k, for(j:small=1,n-2*i+1, M[i+j]+=M[j]); res+=M[n-i+1]:int); return(res); } For pnk(10000,3000): With GP: 4,585 ms. With GP2C: 609 ms Cheers, Bill