У моего решения есть пожалуй только один недостаток — оно несколько тяжеловато — 4 64-х битных умножения. Можно сделать и существенно быстрее, но надо будет повозиться с таблицами. Если это действительно критично, пиши, сделаю.
And if you listen very hard the alg will come to you at last.