it works, but it is slow!
division still needs optimization