s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
public static short parity(long x) {
x ^= (x >>> 32);
x ^= (x >>> 16);
x ^= (x >>> 8);
x ^= (x >>> 4);
x ^= (x >>> 2);
x ^= (x >>> 1);
return (short) (x & 1);
}
private static double power(double x, int y){
double result= 1.0;
boolean isPositive = true;
if (y < 0){
isPositive = false;
y = - y;
}
while( y > 0){
if ( y%2 == 1){
result *= x;
}
x *= x;
y /= 2;
}
if(!isPositive){
result = 1 / result;
}
return result;
}