public long GetMinCalculateCount(long sourceX, long sourceY, long targetX, long targetY) { int count = 0; while (targetX > 0 && targetY > 0) { if (targetX == sourceX && targetY == sourceY) { return count; } else if (targetX % 2 == 1 && targetY % 2 == 1) { count++; targetX--; targetY--; } else if ((targetX % 2 == 0 && targetY % 2 == 0) && ((targetX / 2 > sourceX && targetY / 2 > sourceY) || (targetX / 2 == sourceX && targetY / 2 == sourceY))) { count++; targetX /= 2; targetY /= 2; } else { return (targetX - sourceX == targetY - sourceY) ? count + (targetX - sourceX) : -1; } } return -1; }