Shors algorithm