1 에서 n 까지 이 n 개의 정수 간 의 이 또는 값 구하 기 (O (1) 알고리즘)
: 1 n n , 1 xor 2 xor 3 ... xor n
f(x, y) x y 。
f(2^k, 2^(k+1) -1) ( ^ “ ”,xor “ ”,or “ ”):
2^k 2^(k+1) -1 2^k , (+k ) 1 2^k,
k >= 1, 2^k , 2^k (+k ) , 。
f(2^k, 2^(k+1) -1) = f(2^k - 2^k, 2^(k+1) -1 -2^k) = f(0, 2^k -1)
f(0, 2^(k+1) -1) = f(0, 2^k -1) xor f(2^k, 2^(k+1) -1) = 0 (k >= 1)
f(0, 2^k - 1) = 0 (k >= 2)
f(0, n) (n >= 4) n 1 +k (k >= 2),
f(0, n) = f(0, 2^k - 1) xor f(2^k, n) = f(2^k, n)
2^k n n+1-2^k , (+k ) m = n+1-2^k 1, 1
n ,m , f(0, n) = f(2^k, n) = f(0, n - 2^k)
n - 2^k n , , :f(0, n) = f(0, n % 4)
n % 4 == 1 , f(0, n) = f(0, 1) = 1
n % 4 == 3 , f(0, n) = f(0, 3) = 0
n ,m , f(0, n) = f(2^k, n) = f(0, n - 2^k) or 2^k
, 1 , n - 2^k n , ,
:f(0, n) = nn or f(0, n % 4) (nn n 2 0)
n % 4 == 0 , f(0, n) = n
n % 4 == 2 , f(0, n) = nn or 3 = n + 1 ( n = 2 )
:
f(1, n) = f(0, n) =
n n % 4 == 0
1 n % 4 == 1
n +1 n % 4 == 2
0 n % 4 == 3
:
unsigned xor_n(unsigned n)
{
unsigned t = n & 3;
if (t & 1) return t / 2u ^ 1;
return t / 2u ^ n;
}
참고:http://www.저희. com / article / 5002742. htm
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.