Your assumption that if xy is a perfect square then root of it will be a valid pair seems wrong. In the 15th test case where you are getting wrong answer (r,r) is not a valid pair. So i modified that statement to
if(rr==xy && __gcd(r,r)==x)
ans–;
The output comes 16 now. Try to resumbit it now

__gcd(r,r) will be r which may or may not be equal to x but outside the loop you are checking r*r==xy then subtracting 1 from ans but (r,r) may not have been taken into account.