Partial products algorithm