UVa 10831 - Gerg's Cake

10831 - Gerg's Cake

 * http://acm.uva.es/p/v108/10831.html

Summary
Given $$a$$ and $$p$$, can a square cake be divided into $$a+n*p$$ equal sized pieces?

Explanation
You have to test whether there is a solution to $$x^2=a+n*p$$, where $$n$$ is an integer. Taking everything modulo $$p$$, we get $$x^2=a (mod p)$$. Now we use a trick to get to Fermat's Little Theorem: we take everything to the power $$(p-1)/2$$, so we get $$x^{p-1}=a^{(p-1)/2}=1 (mod p)$$. So we only have to check whether $$a^{(p-1)/2}=1 (mod p)$$. If it is, there is a solution and otherwise there isn't. This can easily be calculated in $$O(log(p))$$.

Gotcha's
There are a few special cases, for example $$a=0 (mod p)$$, $$p=1$$ and $$p=2$$.

Input
1 3 1024 17 2 101 0 1 -1 -1

Output
Yes Yes No Yes