Partial Products Algorithm