求一段连续自然数的异或结果

背景

  • 最近看到用异或找出连续自然数中某一值重复1次/缺失的问题(出现奇偶次不同作为查找特征的问题),针对其中与高斯求和法相类比的连续自然数(或连续整数)值求异或法,给出一种快速求法,最坏时间复杂度为7次异或。

1. 预定义

  • 定义域: N N N
  • 基本运算:异或符号记作 ⨁ ⨁ ,真值表:
    异或真值表
  • 对应法则:记 f ( a , b ) = ⨁ i = a b i = a ⨁ ( a + 1 ) ⨁ … ⨁ b , a < b 且 a , b ∈ N f(a,b)=⨁_{i=a}^b i=a⨁(a+1) ⨁…⨁b,a<b且a,b∈N f(a,b)=i=abi=a(a+1)b,a<ba,bN
  • 规定:异或是双目运算符,当 b = a b=a b=a时,特别规定 f ( a , b ) = f ( a , a ) = a f(a,b)=f(a,a)=a f(a,b)=f(a,a)=a,表示未参与异或运算。

2. 结论

f ( a , b ) = f ( a − 1 − m o d ( a − 1 , 4 ) , a − 1 ) ⨁ f ( b − m o d ( b , 4 ) , b ) , 其 中 a , b ∈ N , a ≤ b f(a,b)=f(a-1-mod(a-1,4),a-1)⨁f(b-mod(b,4),b),其中a,b∈N, a≤b f(a,b)=f(a1mod(a1,4),a1)f(bmod(b,4),b)a,bN,ab
其中 m o d mod mod为取余运算。

  • 代码示例:(示例代码的适用范围已从连续自然数扩展为连续整数,见推论1)
from _operator import xor, mod

# f(a,b) = f(a-1-mod(a-1,4),a-1)⨁f(b-mod(b,4),b)
def N_seq_xor(a, b):
    if not isinstance(a, int) or not isinstance(b, int):
        raise ValueError('Parameters should be integers!')
        
    if a > b:
        print('Warning: Parameters should be in ascending order! Try to exchange the values of "a" and "b" before running!')
        return N_seq_xor(b, a)
        
    pace = b - a
    if pace < 4:  # 0 won't make any difference to the xor result.
        a_0 = a
        a_1 = 0 if pace < 1 else a_0 + 1
        a_2 = 0 if pace < 2 else a_0 + 2
        a_3 = 0 if pace < 3 else a_0 + 3
        return xor(xor(a_0, a_1), xor(a_2, a_3))
    else:
        return xor(N_seq_xor(a-1-mod(a-1, 4), a-1), N_seq_xor(b-mod(b, 4), b))

推论
推论部分为3.证明之后的额外内容,可略过。

  • 推论1:以 0 0 0与除数 y y y构成的半开区间为模除的值域(即 [ 0 , y ) [0,y) [0,y) ( − y , 0 ] (-y,0] (y,0] y ∈ N + y∈N^+ yN+),补充 m o d mod mod定义
    m o d ( − x , y ) = − m o d ( x , y ) + y , m o d ( x , − y ) = m o d ( x , y ) − y , m o d ( − x , − y ) = − m o d ( x , y ) , 其 中 x ∈ N , y ∈ N + \begin{aligned} &mod(-x,y)=-mod(x,y)+y,\\ &mod(x,-y)=mod(x,y)-y,\\ &mod(-x,-y)=-mod(x,y),\\ \end{aligned} 其中x∈N, y∈N^+ mod(x,y)=mod(x,y)+y,mod(x,y)=mod(x,y)y,mod(x,y)=mod(x,y),xN,yN+
    则公式
    f ( a , b ) = f ( a − 1 − m o d ( a − 1 , 4 ) , a − 1 ) ⨁ f ( b − m o d ( b , 4 ) , b ) , 其 中 a , b ∈ Z , a ≤ b f(a,b)=f(a-1-mod(a-1,4),a-1)⨁f(b-mod(b,4),b), 其中a,b∈Z, a≤b f(a,b)=f(a1mod(a1,4),a1)f(bmod(b,4),b)a,bZ,ab
    仍成立,且公式(1)(2)(3)仍成立(证明略)。
  • 推论2:特别地,当 a = 4 k , k ∈ Z a=4k, k∈Z a=4k,kZ b ∈ Z , a ≤ b b∈Z, a≤b bZ,ab时, m o d ( a , 4 ) = 0 mod(a,4)=0 mod(a,4)=0,
    p a c e = m o d ( b − a , 4 ) pace=mod(b-a,4) pace=mod(ba,4),则有
p a c e pace pace f ( a , b ) f(a,b) f(a,b)
0 0 0 b b b
1 1 1 1 1 1
2 2 2 b + 1 b+1 b+1
3 3 3 0 0 0
  • 代码示例:(示例代码的适用范围已从连续自然数扩展为连续整数,见推论1)
from _operator import xor, mod

def N_seq_xor_4k_start(a, b):
    if not isinstance(a, int) or not isinstance(b, int):
        raise ValueError('Parameters should be integers!')
        
    if a > b:
        raise ValueError('Parameters should be in ascending order!')
    
    if mod(a, 4) != 0:
        raise ValueError('Integer "a" must be a multiple of 4!')
    
    results = [b, 1, b + 1, 0]
    return results[mod(b, 4)]

if __name__ == "__main__":
    # print(N_seq_xor(0, 10))
    # print(N_seq_xor_4k_start(0, 10))

    a = -4
    b_list = range(a, 16)
    for b in b_list:
        # y = N_seq_xor(a, b)
        y = N_seq_xor_4k_start(a, b)
        print(a, b, y)
        if mod(b, 4) == 3:
            print()

推论2证明
在推论1的补充定义下,当 a = 4 k , k ∈ Z a=4k, k∈Z a=4k,kZ a ≤ b a≤b ab 时,
m o d ( b , 4 ) = m o d ( b − 4 k , 4 ) = m o d ( b − a , 4 ) = p a c e , k ∈ Z mod(b,4)=mod(b-4k,4)=mod(b-a,4)=pace, k∈Z mod(b,4)=mod(b4k,4)=mod(ba,4)=pace,kZ
可记 b = 4 k ′ + m o d ( b , 4 ) = 4 k ′ + p a c e , k ′ ∈ Z b=4k'+mod(b,4)=4k'+pace, k'∈Z b=4k+mod(b,4)=4k+pace,kZ
由公式(1) f ( 4 k , 4 k + 3 ) = 0 , k ∈ N f(4k,4k+3)=0,k∈N f(4k,4k+3)=0,kN及推论1,
可得 f ( 4 ( k − 1 ) , 4 ( k − 1 ) + 3 ) = 0 , k ∈ Z f(4(k-1),4(k-1)+3)=0,k∈Z f(4(k1),4(k1)+3)=0,kZ

f ( a , b ) = f ( a − 1 − m o d ( a − 1 , 4 ) , a − 1 ) ⨁ f ( b − m o d ( b , 4 ) , b ) = f ( 4 k − 1 − m o d ( 4 k − 1 , 4 ) , 4 k − 1 ) ⨁ f ( b − p a c e , b ) = f ( 4 k − 1 − m o d ( 4 k − 1 , 4 ) , 4 k − 1 ) ⨁ f ( 4 k ′ , 4 k ′ + p a c e ) = f ( 4 k − 1 − 3 , 4 k − 1 ) ⨁ f ( 4 k ′ , 4 k ′ + p a c e ) = f ( 4 ( k − 1 ) , 4 ( k − 1 ) + 3 ) ⨁ f ( 4 k ′ , 4 k ′ + p a c e ) = 0 ⨁ f ( 4 k ′ , 4 k ′ + p a c e ) = f ( 4 k ′ , 4 k ′ + p a c e ) \begin{aligned} f(a,b)&=f(a-1-mod(a-1,4),a-1)⨁f(b-mod(b,4),b) \\ &=f(4k-1-mod(4k-1,4),4k-1)⨁f(b-pace,b)\\ &=f(4k-1-mod(4k-1,4),4k-1)⨁f(4k',4k'+pace)\\ &=f(4k-1-3,4k-1)⨁f(4k',4k'+pace)\\ &=f(4(k-1),4(k-1)+3)⨁f(4k',4k'+pace)\\ &=0⨁f(4k',4k'+pace)\\ &=f(4k',4k'+pace) \end{aligned} f(a,b)=f(a1mod(a1,4),a1)f(bmod(b,4),b)=f(4k1mod(4k1,4),4k1)f(bpace,b)=f(4k1mod(4k1,4),4k1)f(4k,4k+pace)=f(4k13,4k1)f(4k,4k+pace)=f(4(k1),4(k1)+3)f(4k,4k+pace)=0f(4k,4k+pace)=f(4k,4k+pace)
p a c e = 0 pace=0 pace=0 时, b = 4 k ′ + 0 b=4k'+0 b=4k+0, f ( a , b ) = f ( 4 k ′ , 4 k ′ + 0 ) = f ( b , b ) = b f(a,b)=f(4k',4k'+0)=f(b,b)=b f(a,b)=f(4k,4k+0)=f(b,b)=b
p a c e = 1 pace=1 pace=1 时, b = 4 k ′ + 1 b=4k'+1 b=4k+1, f ( a , b ) = f ( 4 k ′ , 4 k ′ + 1 ) = 1 f(a,b)=f(4k',4k'+1)=1 f(a,b)=f(4k,4k+1)=1
p a c e = 2 pace=2 pace=2 时, b = 4 k ′ + 2 b=4k'+2 b=4k+2, f ( a , b ) = f ( 4 k ′ , 4 k ′ + 2 ) = 1 ⨁ ( 4 k ′ + 2 ) = 4 k ′ + 3 = b + 1 f(a,b)=f(4k',4k'+2)=1⨁(4k'+2)=4k'+3=b+1 f(a,b)=f(4k,4k+2)=1(4k+2)=4k+3=b+1
p a c e = 3 pace=3 pace=3 时, b = 4 k ′ + 3 b=4k'+3 b=4k+3, f ( a , b ) = f ( 4 k ′ , 4 k ′ + 3 ) = ( 4 k ′ + 3 ) ⨁ ( 4 k ′ + 3 ) = 0 f(a,b)=f(4k',4k'+3)=(4k'+3)⨁(4k'+3)=0 f(a,b)=f(4k,4k+3)=(4k+3)(4k+3)=0
得证。

3. 证明

3.1 异或性质:

  • 1、交换律: a ⨁ b = b ⨁ a a⨁b=b⨁a ab=ba
  • 2、结合律: ( a ⨁ b ) ⨁ c = a ⨁ ( b ⨁ c ) (a⨁b)⨁c=a⨁(b⨁c) (ab)c=a(bc)
  • 3、基本等式: a ⨁ a = 0 , a ⨁ 0 = a , a ⨁ b ⨁ b = a a⨁a=0,a⨁0=a, a⨁b⨁b=a aa=0a0=aabb=a
    其中 a , b , c ∈ N a,b,c∈N a,b,cN
  • 4、二进制分配率及推论:
    设序列 a 0 , a 1 , … , a m , b 0 , b 1 , … , b n ∈ { 0 , 1 } a_0,a_1,…,a_m,b_0,b_1,…,b_n∈\{0,1\} a0,a1,,am,b0,b1,,bn{0,1},自然数 a = ( a m … a 1 a 0 ) 2 a=(a_m…a_1 a_0)_2 a=(ama1a0)2 b = ( b n … b 1 b 0 ) 2 b=(b_n…b_1 b_0)_2 b=(bnb1b0)2
    a ⨁ b = ( a m … a 1 a 0 ) 2 ⨁ ( b n … b 1 b 0 ) 2 a⨁b=(a_m…a_1 a_0)_2⨁(b_n…b_1 b_0)_2 ab=(ama1a0)2(bnb1b0)2,当 m ≥ n m≥n mn时,有:
    a ⨁ b = ( a m … a n … a 1 a 0 ) 2 ⨁ ( b n … b 1 b 0 ) 2 = [ v a l ( a m ⨁ 0 ) … v a l ( a n + 1 ⨁ 0 ) v a l ( a n ⨁ b n ) … v a l ( a 1 ⨁ b 1 ) v a l ( a 0 ⨁ b 0 ) ] 2 a⨁b=(a_m…a_n…a_1 a_0 )_2⨁(b_n…b_1 b_0 )_2 \\ =[val(a_m⨁0)…val(a_{n+1}⨁0)val(a_n⨁b_n )…val(a_1⨁b_1 )val(a_0⨁b_0)]_2 ab=(amana1a0)2(bnb1b0)2=[val(am0)val(an+10)val(anbn)val(a1b1)val(a0b0)]2
    其中 v a l ( a n ⨁ b n ) val(a_n⨁b_n) val(anbn) a n ⨁ b n a_n⨁b_n anbn的值,将值赋给第 n n n位。
    b n + 1 , b n + 2 … , b m = 0 b_{n+1},b_{n+2}…,b_m=0 bn+1,bn+2,bm=0则可简化为:
    a ⨁ b = [ v a l ( a m ⨁ b m ) … v a l ( a 1 ⨁ b 1 ) v a l ( a 0 ⨁ b 0 ) ] 2 a⨁b=[val(a_m⨁b_m)…val(a_1⨁b_1)val(a_0⨁b_0)]_2 ab=[val(ambm)val(a1b1)val(a0b0)]2
    转为十进制:
    a ⨁ b = [ v a l ( a m ⨁ b m ) … v a l ( a 1 ⨁ b 1 ) v a l ( a 0 ⨁ b 0 ) ] 2 = v a l ( a m ⨁ b m ) ∗ 2 m + ⋯ + v a l ( a 1 ⨁ b 1 ) ∗ 2 1 + v a l ( a 0 ⨁ b 0 ) ∗ 2 0 = ∑ i = 0 m v a l ( a i ⨁ b i ) ∗ 2 i a⨁b=[val(a_m⨁b_m )…val(a_1⨁b_1 )val(a_0⨁b_0 )]_2\\ =val(a_m⨁b_m )*2^m+⋯+val(a_1⨁b_1 )*2^1+val(a_0⨁b_0 )*2^0\\ =∑_{i=0}^m val(a_i⨁b_i )*2^i ab=[val(ambm)val(a1b1)val(a0b0)]2=val(ambm)2m++val(a1b1)21+val(a0b0)20=i=0mval(aibi)2i
    m < n m<n m<n时同理有: a ⨁ b = ∑ i = 0 n v a l ( a i ⨁ b i ) ∗ 2 i a⨁b=∑_{i=0}^n val(a_i⨁b_i )*2^i ab=i=0nval(aibi)2i
    综上:
    a ⨁ b = ∑ i = 0 max ⁡ ⁡ ( m , n ) v a l ( a i ⨁ b i ) ∗ 2 i a⨁b=∑_{i=0}^{\max⁡(m,n)} val(a_i⨁b_i )*2^i ab=i=0max(m,n)val(aibi)2i
    以十进制自然数 x x x为例,其转二进制公式为:
    x = ∑ i = 0 k m o d i + 1 ( x , 2 ) ∗ 2 i = [ m o d k + 1 ( x , 2 ) … m o d 2 ( x , 2 ) m o d 1 ( x , 2 ) ] 2 x=∑_{i=0}^k mod_{i+1} (x,2)*2^i\\ =[mod_{k+1} (x,2)…mod_2 (x,2) mod_1 (x,2)]_2 x=i=0kmodi+1(x,2)2i=[modk+1(x,2)mod2(x,2)mod1(x,2)]2
    其中 k = ⌊ l o g 2 ⁡ x ⌋ , m o d i + 1 ( x , 2 ) k=⌊log_2⁡x ⌋, mod_{i+1} (x,2) k=log2x,modi+1(x,2)表示 x x x 2 2 2取余数运算第 i + 1 i+1 i+1次的结果,即 x x x的二进制表示中相应位的值, 2 i 2^i 2i则是相应位的进率。
    a ⨁ b = ( ∑ i = 0 k a m o d i + 1 ( a , 2 ) ∗ 2 i ) ⨁ ( ∑ i = 0 k b m o d i + 1 ( b , 2 ) ∗ 2 i ) = [ m o d k a + 1 ( a , 2 ) … m o d 2 ( a , 2 ) m o d 1 ( a , 2 ) ] 2 ⨁ [ m o d k b + 1 ( b , 2 ) … m o d 2 ( b , 2 ) m o d 1 ( b , 2 ) ] 2 = ∑ i = 0 max ⁡ ⁡ ( k a , k b ) v a l [ m o d i + 1 ( a , 2 ) ⨁ m o d i + 1 ( b , 2 ) ] ∗ 2 i a⨁b=(∑_{i=0}^{k_a} mod_{i+1} (a,2)*2^i )⨁(∑_{i=0}^{k_b} mod_{i+1} (b,2)*2^i)\\ =[mod_{k_a+1} (a,2)…mod_2 (a,2) mod_1 (a,2)]_2⨁[mod_{k_b+1} (b,2)…mod_2 (b,2) mod_1 (b,2)]_2\\ =∑_{i=0}^{\max⁡(k_a,k_b)} val[mod_{i+1} (a,2)⨁mod_{i+1} (b,2)]*2^i ab=(i=0kamodi+1(a,2)2i)(i=0kbmodi+1(b,2)2i)=[modka+1(a,2)mod2(a,2)mod1(a,2)]2[modkb+1(b,2)mod2(b,2)mod1(b,2)]2=i=0max(ka,kb)val[modi+1(a,2)modi+1(b,2)]2i
    其中 k a = ⌊ l o g 2 ⁡ a ⌋ , k b = ⌊ l o g 2 ⁡ b ⌋ k_a=⌊log_2⁡a ⌋,k_b=⌊log_2⁡b ⌋ ka=log2a,kb=log2b

3.2 连续自然数的异或

4位2进制表示图
异或可看作统计二进制表示中对应位状态为1的奇偶个数的运算。从图中看出如下规律:
f ( 4 k , 4 k + 3 ) = 0 , k ∈ N (1) f(4k,4k+3)=0,k∈N \tag{1} f(4k,4k+3)=0,kN(1)
显然(数学归纳法)推论为
f ( 4 k 1 , 4 k 2 + 3 ) = 0 , k 1 , k 2 ∈ N 且 k 1 ≤ k 2 f(4k_1,4k_2+3)=0,k_1,k_2∈N且k_1≤k_2 f(4k1,4k2+3)=0,k1,k2Nk1k2
于是有
f ( 0 , b ) = f ( 0 , b − m o d ( b , 4 ) − 1 ) ⨁ f ( b − m o d ( b , 4 ) , b ) = 0 ⨁ f ( b − m o d ( b , 4 ) , b ) = f ( b − m o d ( b , 4 ) , b ) f(0,b)=f(0,b-mod(b,4)-1)⨁f(b-mod(b,4),b)\\ =0⨁f(b-mod(b,4),b)\\ =f(b-mod(b,4),b) f(0,b)=f(0,bmod(b,4)1)f(bmod(b,4),b)=0f(bmod(b,4),b)=f(bmod(b,4),b)
其中 b ∈ N 且 b ≥ 4 b∈N且b≥4 bNb4。注意自然数 b − m o d ( b , 4 ) b-mod(b,4) bmod(b,4) 4 4 4的倍数,即 b − m o d ( b , 4 ) ∈ { x ∣ x = 4 k , k ∈ N } b-mod(b,4)∈\{x|x=4k,k∈N\} bmod(b,4){xx=4k,kN}
b ∈ [ 0 , 3 ] b∈[0,3] b[0,3]时,可得 b − m o d ( b , 4 ) = 0 b-mod(b,4)=0 bmod(b,4)=0:而 f ( 0 , b ) = f ( b − m o d ( b , 4 ) , b ) f(0,b)=f(b-mod(b,4),b) f(0,b)=f(bmod(b,4),b)仍然成立。
综上:
f ( 0 , b ) = f ( b − m o d ( b , 4 ) , b ) , b ∈ N f(0,b)=f(b-mod(b,4),b),b∈N f(0,b)=f(bmod(b,4),b),bN
最终求出
f ( a , b ) = f ( 0 , a − 1 ) ⨁ f ( 0 , a − 1 ) ⨁ f ( a , b ) = f ( 0 , a − 1 ) ⨁ f ( 0 , b ) = f ( a − 1 − m o d ( a − 1 , 4 ) , a − 1 ) ⨁ f ( b − m o d ( b , 4 ) , b ) f(a,b)=f(0,a-1)⨁f(0,a-1)⨁f(a,b)\\ =f(0,a-1)⨁f(0,b)\\ =f(a-1-mod(a-1,4),a-1)⨁f(b-mod(b,4),b) f(a,b)=f(0,a1)f(0,a1)f(a,b)=f(0,a1)f(0,b)=f(a1mod(a1,4),a1)f(bmod(b,4),b)
最坏时间复杂度为7次异或。


注意事项:
f ( 4 k , 4 k − 3 ) f(4k,4k-3) f(4k,4k3)中的 4 k 4k 4k 4 4 4的倍数,此函数本身并不是周期函数,而是在震荡特性上类似于函数 y = x s i n ( π / 2 ∗ x ) y=xsin(\pi/2*x) y=xsin(π/2x),只是存在一个特殊的周期序列。
本文到此已基本结束,有兴趣的可以继续看下文的证明,仅作参考,如有错误恳请指正。


附:
( 1 ) (1) 1
k = 0 k=0 k=0时:
f ( 4 k , 4 k − 3 ) = f ( 0 , 3 ) = 0 ⨁ 1 ⨁ 2 ⨁ 3 = ( 00 ) 2 ⨁ ( 01 ) 2 ⨁ ( 10 ) 2 ⨁ ( 11 ) 2 = ( 00 ) 2 = 0 f(4k,4k-3)=f(0,3)\\ =0⨁1⨁2⨁3\\ =(00)_2⨁(01)_2⨁(10)_2⨁(11)_2\\ =(00)_2=0 f(4k,4k3)=f(0,3)=0123=(00)2(01)2(10)2(11)2=(00)2=0
k ∈ N + k∈N^+ kN+时:
f ( 4 k , 4 k − 3 ) = 4 k ⨁ ( 4 k + 1 ) ⨁ ( 4 k + 2 ) ⨁ ( 4 k + 3 ) = ∑ i = 0 ⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ v a l [ m o d i + 1 ( 4 k , 2 ) ⨁ m o d i + 1 ( 4 k + 1 , 2 ) ⨁ m o d i + 1 ( 4 k + 2 , 2 ) ⨁ m o d i + 1 ( 4 k + 3 , 2 ) ] ∗ 2 i = ∑ i = 2 ⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ v a l [ m o d i + 1 ( 4 k , 2 ) ⨁ m o d i + 1 ( 4 k + 1 , 2 ) ⨁ m o d i + 1 ( 4 k + 2 , 2 ) ⨁ m o d i + 1 ( 4 k + 3 , 2 ) ] ∗ 2 i + v a l [ m o d 2 ( 4 k , 2 ) ⨁ m o d 2 ( 4 k + 1 , 2 ) ⨁ m o d 2 ( 4 k + 2 , 2 ) ⨁ m o d 2 ( 4 k + 3 , 2 ) ] ∗ 2 1 + v a l [ m o d 1 ( 4 k , 2 ) ⨁ m o d 1 ( 4 k + 1 , 2 ) ⨁ m o d 1 ( 4 k + 2 , 2 ) ⨁ m o d 1 ( 4 k + 3 , 2 ) ] ∗ 2 0 f(4k,4k-3)=4k⨁(4k+1)⨁(4k+2)⨁(4k+3)\\ =∑_{i=0}^{⌊log_2⁡ (4k+3) ⌋} val[mod_{i+1} (4k,2)⨁mod_{i+1} (4k+1,2)⨁mod_{i+1}(4k+2,2)⨁mod_{i+1} (4k+3,2)]*2^i \\ =∑_{i=2}^{⌊log_2⁡ (4k+3)⌋} val[mod_{i+1} (4k,2)⨁mod_{i+1} (4k+1,2)⨁mod_{i+1} (4k+2,2)⨁mod_{i+1} (4k+3,2)]*2^i \\ +val[mod_2 (4k,2)⨁mod_2 (4k+1,2)⨁mod_2 (4k+2,2)⨁mod_2 (4k+3,2)]*2^1\\ +val[mod_1 (4k,2)⨁mod_1 (4k+1,2)⨁mod_1 (4k+2,2)⨁mod_1 (4k+3,2)]*2^0 f(4k,4k3)=4k(4k+1)(4k+2)(4k+3)=i=0log2(4k+3)val[modi+1(4k,2)modi+1(4k+1,2)modi+1(4k+2,2)modi+1(4k+3,2)]2i=i=2log2(4k+3)val[modi+1(4k,2)modi+1(4k+1,2)modi+1(4k+2,2)modi+1(4k+3,2)]2i+val[mod2(4k,2)mod2(4k+1,2)mod2(4k+2,2)mod2(4k+3,2)]21+val[mod1(4k,2)mod1(4k+1,2)mod1(4k+2,2)mod1(4k+3,2)]20
i = 0 i=0 i=0时:
m o d 1 ( 4 k , 2 ) ⨁ m o d 1 ( 4 k + 1 , 2 ) ⨁ m o d 1 ( 4 k + 2 , 2 ) ⨁ m o d 1 ( 4 k + 3 , 2 ) = 0 ⨁ 1 ⨁ 0 ⨁ 1 = 0 mod_1 (4k,2)⨁mod_1 (4k+1,2)⨁mod_1 (4k+2,2)⨁mod_1 (4k+3,2)=0⨁1⨁0⨁1=0 mod1(4k,2)mod1(4k+1,2)mod1(4k+2,2)mod1(4k+3,2)=0101=0
i = 1 i=1 i=1时:
m o d 2 ( 4 k , 2 ) ⨁ m o d 2 ( 4 k + 1 , 2 ) ⨁ m o d 2 ( 4 k + 2 , 2 ) ⨁ m o d 2 ( 4 k + 3 , 2 ) = 0 ⨁ 0 ⨁ 1 ⨁ 1 = 0 mod_2 (4k,2)⨁mod_2 (4k+1,2)⨁mod_2 (4k+2,2)⨁mod_2 (4k+3,2)=0⨁0⨁1⨁1=0 mod2(4k,2)mod2(4k+1,2)mod2(4k+2,2)mod2(4k+3,2)=0011=0
i ≥ 2 i≥2 i2时(证明附后):
⌊ l o g 2 ⁡ 4 k ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 1 ) ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 2 ) ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ , k ∈ N + (2) ⌊log_2⁡4k ⌋=⌊log_2 ⁡(4k+1) ⌋=⌊log_2⁡ (4k+2) ⌋=⌊log_2⁡ (4k+3) ⌋,k∈N^+ \tag{2} log24k=log2(4k+1)=log2(4k+2)=log2(4k+3),kN+(2)
m o d i + 1 ( 4 k , 2 ) = m o d i + 1 ( 4 k + 1 , 2 ) = m o d i + 1 ( 4 k + 2 , 2 ) = m o d i + 1 ( 4 k + 3 , 2 ) , k ∈ N + , i ≥ 2 (3) mod_{i+1} (4k,2)=mod_{i+1} (4k+1,2)=mod_{i+1} (4k+2,2)=mod_{i+1} (4k+3,2),\\ k∈N^+,i≥2 \tag{3} modi+1(4k,2)=modi+1(4k+1,2)=modi+1(4k+2,2)=modi+1(4k+3,2),kN+,i2(3)
故:
f ( 4 k , 4 k − 3 ) = { ∑ i = 2 ⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ v a l [ m o d i + 1 ( 4 k , 2 ) ⨁ m o d i + 1 ( 4 k + 1 , 2 ) ⨁ m o d i + 1 ( 4 k + 2 , 2 ) ⨁ m o d i + 1 ( 4 k + 3 , 2 ) ] ∗ 2 i } + v a l [ 0 ⨁ 0 ⨁ 1 ⨁ 1 ] ∗ 2 1 + v a l [ 0 ⨁ 1 ⨁ 0 ⨁ 1 ] ∗ 2 0 = { ∑ i = 2 ⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ v a l [ m o d i + 1 ( 4 k , 2 ) ⨁ m o d i + 1 ( 4 k , 2 ) ⨁ m o d i + 1 ( 4 k , 2 ) ⨁ m o d i + 1 ( 4 k , 2 ) ] ∗ 2 i } + v a l [ 0 ⨁ 0 ⨁ 1 ⨁ 1 ] ∗ 2 1 + v a l [ 0 ⨁ 1 ⨁ 0 ⨁ 1 ] ∗ 2 0 = [ ∑ i = 2 ⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ 0 ∗ 2 i ] + 0 ∗ 2 1 + 0 ∗ 2 0 = 0 \begin{aligned} f(4k,4k-3)&=\{∑_{i=2}^{⌊log_2⁡ (4k+3)⌋} val[mod_{i+1} (4k,2)⨁mod_{i+1} (4k+1,2)⨁mod_{i+1} (4k+2,2)⨁mod_{i+1} (4k+3,2)]*2^i \} + \\ &val[0⨁0⨁1⨁1]*2^1+ val[0⨁1⨁0⨁1]*2^0 \\ &=\{∑_{i=2}^{⌊log_2⁡ (4k+3)⌋} val[mod_{i+1} (4k,2)⨁mod_{i+1} (4k,2)⨁mod_{i+1} (4k,2)⨁mod_{i+1} (4k,2)]*2^i \} + \\ &val[0⨁0⨁1⨁1]*2^1+ val[0⨁1⨁0⨁1]*2^0 \\ &=[∑_{i=2}^{⌊log_2⁡ (4k+3) ⌋} 0*2^i]+0*2^1+0*2^0 \\ &=0 \end{aligned} f(4k,4k3)={i=2log2(4k+3)val[modi+1(4k,2)modi+1(4k+1,2)modi+1(4k+2,2)modi+1(4k+3,2)]2i}+val[0011]21+val[0101]20={i=2log2(4k+3)val[modi+1(4k,2)modi+1(4k,2)modi+1(4k,2)modi+1(4k,2)]2i}+val[0011]21+val[0101]20=[i=2log2(4k+3)02i]+021+020=0
综上: f ( 4 k , 4 k − 3 ) = 0 , k ∈ N f(4k,4k-3)=0,k∈N f(4k,4k3)=0,kN
证毕。

( 2 ) (2) 2
k ∈ N + ⌊ l o g 2 ⁡ k ⌋ , ⌊ l o g 2 ⁡ k ⌋ + 1 ∈ N 2 ⌊ l o g 2 ⁡ k ⌋ , 2 ⌊ l o g 2 ⁡ k ⌋ + 1 ∈ N k∈N^+ \\ ⌊log_2⁡k ⌋,⌊log_2⁡k ⌋+1∈N \\ 2^{⌊log_2⁡k⌋} ,2^{⌊log_2⁡k⌋+1}∈N kN+log2k,log2k+1N2log2k,2log2k+1N
根据下取整定义:
⌊ l o g 2 ⁡ k ⌋ ≤ l o g 2 ⁡ k < ⌊ l o g 2 ⁡ k ⌋ + 1 2 ⌊ l o g 2 ⁡ k ⌋ ≤ k < 2 ⌊ l o g 2 ⁡ k ⌋ + 1 ⌊log_2⁡k ⌋≤log_2⁡k<⌊log_2⁡k ⌋+1 \\ 2^{⌊log_2⁡k ⌋} ≤k<2^{⌊log_2⁡k ⌋+1} \\ log2klog2k<log2k+12log2kk<2log2k+1
k , 2 ⌊ l o g 2 ⁡ k ⌋ + 1 ∈ N k,2^{⌊log_2⁡k ⌋+1}∈N k,2log2k+1N
2 ⌊ l o g 2 ⁡ k ⌋ ≤ k < k + 1 ≤ 2 ⌊ l o g 2 ⁡ k ⌋ + 1 2^{⌊log_2⁡k ⌋} ≤k<k+1≤2^{⌊log_2⁡k ⌋+1} 2log2kk<k+12log2k+1
故有:
2 ⌊ l o g 2 ⁡ k ⌋ ≤ k < k + 3 4 < k + 1 ≤ 2 ⌊ l o g 2 ⁡ k ⌋ + 1 ⌊ l o g 2 ⁡ k ⌋ ≤ l o g 2 ⁡ k < l o g 2 ⁡ ( k + 3 4 ) < l o g 2 ⁡ ( k + 1 ) ≤ ⌊ l o g 2 ⁡ k ⌋ + 1 2^{⌊log_2⁡k ⌋} ≤k<k+\frac{3}{4}<k+1≤2^{⌊log_2⁡k ⌋+1} \\ ⌊log_2⁡k ⌋≤log_2⁡ k<log_2 ⁡(k+\frac{3}{4})<log_2⁡ (k+1)≤⌊log_2⁡k ⌋+1 2log2kk<k+43<k+12log2k+1log2klog2k<log2(k+43)<log2(k+1)log2k+1
即有
⌊ l o g 2 ⁡ k ⌋ < l o g 2 ⁡ ( k + 3 4 ) < ⌊ l o g 2 ⁡ k ⌋ + 1 ⌊log_2⁡k ⌋<log_2⁡(k+\frac{3}{4})<⌊log_2⁡k ⌋+1 log2k<log2(k+43)<log2k+1
根据下取整的定义、单调不减性质可得:
⌊ l o g 2 ⁡ k ⌋ ≤ ⌊ l o g 2 ⁡ ( k + 3 4 ) ⌋ ≤ l o g 2 ⁡ ( k + 3 4 ) < ⌊ l o g 2 ⁡ k ⌋ + 1 ⌊log_2⁡k ⌋≤⌊log_2⁡(k+\frac{3}{4}) ⌋≤log_2⁡(k+\frac{3}{4})<⌊log_2⁡k ⌋+1 log2klog2(k+43)log2(k+43)<log2k+1
又由于 ⌊ l o g 2 ⁡ k ⌋ , ⌊ l o g 2 ⁡ ( k + 3 4 ) ⌋ ∈ N ⌊log_2⁡k ⌋, ⌊log_2⁡(k+\frac{3}{4}) ⌋∈N log2k,log2(k+43)N,故可根据上式中 ⌊ l o g 2 ⁡ ( k + 3 4 ) ⌋ < ⌊ l o g 2 ⁡ k ⌋ + 1 ⌊log_2⁡(k+\frac{3}{4}) ⌋<⌊log_2⁡k ⌋+1 log2(k+43)<log2k+1
⌊ l o g 2 ⁡ ( k + 3 4 ) ⌋ ≤ ( ⌊ l o g 2 ⁡ k ⌋ + 1 ) − 1 = ⌊ l o g 2 ⁡ k ⌋ ⌊log_2⁡ (k+\frac{3}{4}) ⌋≤(⌊log_2 ⁡k ⌋+1)-1=⌊log_2⁡k ⌋ log2(k+43)(log2k+1)1=log2k
综合以上两个不等式,得
⌊ l o g 2 ⁡ k ⌋ ≤ ⌊ l o g 2 ⁡ ( k + 3 4 ) ⌋ ≤ ⌊ l o g 2 ⁡ k ⌋ ⌊log_2⁡k ⌋≤⌊log_2⁡ (k+\frac{3}{4}) ⌋≤⌊log_2⁡k ⌋ log2klog2(k+43)log2k
根据下取整的定义、单调不减性质,得
⌊ l o g 2 ⁡ k ⌋ ≤ ⌊ l o g 2 ⁡ ( k + 1 4 ) ⌋ ≤ ⌊ l o g 2 ⁡ ( k + 2 4 ) ⌋ ≤ ⌊ l o g 2 ⁡ ( k + 3 4 ) ⌋ ≤ ⌊ l o g 2 ⁡ k ⌋ ⌊log_2⁡k ⌋≤⌊log_2⁡(k+\frac{1}{4}) ⌋≤⌊log_2⁡(k+\frac{2}{4}) ⌋≤⌊log_2⁡(k+\frac{3}{4}) ⌋≤⌊log_2⁡k ⌋ log2klog2(k+41)log2(k+42)log2(k+43)log2k

⌊ l o g 2 ⁡ k ⌋ = ⌊ l o g 2 ⁡ ( k + 1 4 ) ⌋ = ⌊ l o g 2 ⁡ ( k + 2 4 ) ⌋ = ⌊ l o g 2 ⁡ ( k + 3 4 ) ⌋ ⌊log_2⁡k ⌋=⌊log_2⁡(k+\frac{1}{4}) ⌋=⌊log_2⁡(k+\frac{2}{4}) ⌋=⌊log_2⁡(k+\frac{3}{4}) ⌋ log2k=log2(k+41)=log2(k+42)=log2(k+43)

⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ = ⌊ l o g 2 ⁡ 4 ( k + 3 4 ) ⌋ = ⌊ 2 + l o g 2 ⁡ ( k + 3 4 ) ⌋ = 2 + ⌊ l o g 2 ⁡ ( k + 3 4 ) ⌋ = 2 + ⌊ l o g 2 ⁡ k ⌋ = ⌊ 2 + l o g 2 ⁡ k ⌋ = ⌊ l o g 2 ⁡ 4 k ⌋ ⌊log_2⁡ (4k+3) ⌋=⌊log_2⁡ 4(k+\frac{3}{4}) ⌋=⌊2+log_2 ⁡(k+\frac{3}{4}) ⌋=2+⌊log_2 ⁡(k+\frac{3}{4}) ⌋ \\ =2+⌊log_2⁡k ⌋=⌊2+log_2 ⁡k ⌋=⌊log_2⁡ 4k ⌋ log2(4k+3)=log24(k+43)=2+log2(k+43)=2+log2(k+43)=2+log2k=2+log2k=log24k
同理可证:
⌊ l o g 2 ⁡ ( 4 k + 2 ) ⌋ = ⌊ l o g 2 ⁡ 4 k ⌋ ⌊ l o g 2 ⁡ ( 4 k + 1 ) ⌋ = ⌊ l o g 2 ⁡ 4 k ⌋ ⌊log_2⁡ (4k+2) ⌋=⌊log_2⁡4k ⌋ \\ ⌊log_2 ⁡(4k+1) ⌋=⌊log_2⁡4k ⌋ log2(4k+2)=log24klog2(4k+1)=log24k

⌊ l o g 2 ⁡ 4 k ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 1 ) ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 2 ) ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ , k ∈ N + ⌊log_2⁡4k ⌋=⌊log_2⁡ (4k+1) ⌋=⌊log_2⁡ (4k+2) ⌋=⌊log_2 ⁡(4k+3) ⌋,k∈N^+ log24k=log2(4k+1)=log2(4k+2)=log2(4k+3),kN+
证毕。

( 3 ) (3) 3
已知 k ∈ N + , i ≥ 2 k∈N^+,i≥2 kN+,i2
4 k 4k 4k用二进制展开:
4 k = [ m o d ⌊ l o g 2 ⁡ 4 k ⌋ + 1 ( 4 k , 2 ) … m o d 3 ( 4 k , 2 ) 00 ] 2 4k=[mod_{⌊log_2⁡4k ⌋+1} (4k,2)…mod_3 (4k,2)00]_2 4k=[modlog24k+1(4k,2)mod3(4k,2)00]2
则有:
4 k + 1 = [ m o d ⌊ l o g 2 ⁡ 4 k ⌋ + 1 ( 4 k , 2 ) … m o d 3 ( 4 k , 2 ) 00 ] 2 + 1 = [ m o d ⌊ l o g 2 ⁡ 4 k ⌋ + 1 ( 4 k , 2 ) … m o d 3 ( 4 k , 2 ) 00 ] 2 + [ 01 ] 2 = [ m o d ⌊ l o g 2 ⁡ 4 k ⌋ + 1 ( 4 k , 2 ) … m o d 3 ( 4 k , 2 ) 01 ] 2 \begin{aligned} 4k+1&=[mod_{⌊log_2⁡4k ⌋+1} (4k,2)…mod_3 (4k,2)00]_2+1 \\ &=[mod_{⌊log_2⁡4k ⌋+1} (4k,2)…mod_3 (4k,2)00]_2+[01]_2 \\ &=[mod_{⌊log_2⁡4k ⌋+1} (4k,2)…mod_3 (4k,2)01]_2 \end{aligned} 4k+1=[modlog24k+1(4k,2)mod3(4k,2)00]2+1=[modlog24k+1(4k,2)mod3(4k,2)00]2+[01]2=[modlog24k+1(4k,2)mod3(4k,2)01]2
注意最后的等号是恒等变形,未对前面的位有任何改动。
另一方面,将 4 k + 1 4k+1 4k+1用二进制展开:
4 k + 1 = [ m o d ⌊ l o g 2 ⁡ ( 4 k + 1 ) ⌋ + 1 ( 4 k + 1 , 2 ) … m o d 3 ( 4 k + 1 , 2 ) 01 ] 2 4k+1=[mod_{⌊log_2⁡ (4k+1) ⌋+1} (4k+1,2)…mod_3 (4k+1,2)01]_2 4k+1=[modlog2(4k+1)+1(4k+1,2)mod3(4k+1,2)01]2
又由于 ( 2 ) (2) 2中已证明
⌊ l o g 2 ⁡ 4 k ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 1 ) ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 2 ) ⌋ = ⌊ l o g 2 ⁡ ( 4 k + 3 ) ⌋ ⌊log_2⁡ 4k ⌋=⌊log_2⁡ (4k+1) ⌋=⌊log_2⁡ (4k+2)⌋=⌊log_2⁡ (4k+3)⌋ log24k=log2(4k+1)=log2(4k+2)=log2(4k+3)

4 k + 1 = [ m o d ⌊ l o g 2 ⁡ 4 k ⌋ + 1 ( 4 k + 1 , 2 ) … m o d 3 ( 4 k + 1 , 2 ) 01 ] 2 4k+1=[mod_{⌊log_2⁡4k ⌋+1} (4k+1,2)…mod_3 (4k+1,2)01]_2 4k+1=[modlog24k+1(4k+1,2)mod3(4k+1,2)01]2

[ m o d ⌊ l o g 2 ⁡ 4 k ⌋ + 1 ( 4 k , 2 ) … m o d 3 ( 4 k , 2 ) 01 ] 2 = [ m o d ⌊ l o g 2 ⁡ 4 k ⌋ + 1 ( 4 k + 1 , 2 ) … m o d 3 ( 4 k + 1 , 2 ) 01 ] 2 [mod_{⌊log_2⁡4k ⌋+1} (4k,2)…mod_3 (4k,2)01]_2 \\ =[mod_{⌊log_2⁡4k ⌋+1} (4k+1,2)…mod_3 (4k+1,2)01]_2 [modlog24k+1(4k,2)mod3(4k,2)01]2=[modlog24k+1(4k+1,2)mod3(4k+1,2)01]2
于是有
m o d i + 1 ( 4 k , 2 ) = m o d i + 1 ( 4 k + 1 , 2 ) mod_{i+1} (4k,2)=mod_{i+1} (4k+1,2) modi+1(4k,2)=modi+1(4k+1,2)
同理可证:
m o d i + 1 ( 4 k , 2 ) = m o d i + 1 ( 4 k + 2 , 2 ) m o d i + 1 ( 4 k , 2 ) = m o d i + 1 ( 4 k + 3 , 2 ) mod_{i+1} (4k,2)=mod_{i+1} (4k+2,2) \\ mod_{i+1} (4k,2)=mod_{i+1} (4k+3,2) modi+1(4k,2)=modi+1(4k+2,2)modi+1(4k,2)=modi+1(4k+3,2)
综上:
m o d i + 1 ( 4 k , 2 ) = m o d i + 1 ( 4 k + 1 , 2 ) = m o d i + 1 ( 4 k + 2 , 2 ) = m o d i + 1 ( 4 k + 3 , 2 ) , k ∈ N + , i ≥ 2 mod_{i+1} (4k,2)=mod_{i+1} (4k+1,2)=mod_{i+1} (4k+2,2)=mod_{i+1} (4k+3,2),\\ k∈N^+,i≥2 modi+1(4k,2)=modi+1(4k+1,2)=modi+1(4k+2,2)=modi+1(4k+3,2),kN+,i2
证毕。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bird_fly_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值