与位运算有关的数论问题

最近在学PHP,今天学到位运算,捣鼓出了下面的东西。

 function mersenne($a){
        for($i=0;$i<=(2**$a-1)/$a;$i++){        

            echo "$a&(2**$a-1-$i*$a)=".($a&(2**$a-1-$i*$a));

            echo "<br/>";

        }
    }
 6&(2**6-1-0*6)=6
6&(2**6-1-1*6)=0
6&(2**6-1-2*6)=2
6&(2**6-1-3*6)=4
6&(2**6-1-4*6)=6
6&(2**6-1-5*6)=0
6&(2**6-1-6*6)=2
6&(2**6-1-7*6)=4
6&(2**6-1-8*6)=6
6&(2**6-1-9*6)=0
6&(2**6-1-10*6)=2

显而易见,上面每次输出结果都出现了循环,循环长度可以定义为输入参数n的函数f(n).

  1. 首先我们定义一个自变量为正整数的函数:
    h(n)=n的最大奇因数;

  2. 其次我们定义一个自变量为正奇数的函数:
    g(m)=大于m的最小的2的方幂;

  3. 最后我们可以用不完全归纳法验证:
    f(n)=g(h(n)),n≥6.

现在假设你的电脑不是32位也不是64位,而是无穷位,上面这个结果应该是成立的吧?

当然我们可以重新定义按位与运算,对任意两个正整数m与n,m&n可以如下定义:
将m与n先化为二进制,可以将这两个二进制数看作有无穷多位,即高于某一位的数字都取0。
只有当两个二进制数同位上的两个数字都是1才能取1,否则取0,再将得到的二进制数化为十进制数,并返回给m&n.

这样一来,上面f(n)的定义与计算结果应该是相符的吧?
但是如何证明呢?

除此之外,还能找到其它一些有趣的规律。

设n是一个大于等于6的奇数,2^k是大于n的最小的2的方幂,如果n≠2^k-1,则2^k-n是否一定不出现在循环中?