I think there is a precision problem with the following code:
bool isPerfectSquare(long long n){ long long squareRootN=(long long)(sqrt(n)+0.5); return
You use round.
round
bool isPerfectSquare(long long n){ long long squareRootN=(long long)round((sqrt(n))); if(squareRootN*squareRootN == n) { return true; } else { return false; }
round rounds the number to the nearest rounding. The function will be true only if n is a perfect square.