function XOR(I, J: Integer): Integer; var K: Integer; begin Result := 0; K := 1; while I <> J do begin if odd(I) <> odd(J) then Inc(Result, K); I := I shr 1; J := J shr 1; K := K shl 1; end; end;
function DayOfWeek(Y, M, D: Integer): Integer; begin if M < 3 then begin Dec(Y, 1); Inc(M, 12); end; Result := (Y + (Y shr 2) - (Y div 100) + (Y div 400) + ((13 * M + 8) div 5) + D) mod 7; end;
function Fib(N: Integer): Integer; begin Result := Round(exp(N * Ln((1 + sqrt(5)) / 2)) / sqrt(5)); end;
// 정수형 SquareRoot. sqrt 와 비슷하거나 약간 빠르나 정수만 가능하다. function sqrtInt(X: Integer): Integer; var Y: Integer; begin Result := 1; repeat Y := Result; Result := (X div Result + Result) div 2; until (Result = Y) or (Result = X div Y); end;
// 실수형 SquareRoot. sqrt 보다 많이 느리다. (약 4~5배) function sqrt2(X: Real): Real; begin Result := exp(ln(X) / 2); Result := (Result + X / Result / 2); end;