Cipolla's algorithm

ウィキペディアから