知道要证明什么情况下(x)=(x*(x-1))/2 mod N为N的完全剩余系(从0开始标号),但是YY了一节课都没有太好的思路,回来看了大牛的证明,自己又研究了一会,终于懂了
首先,我们可以发现,f(x)的周期为N或者2*N,但当周期是2*N时,前N个数和后N个数是对称的,可以参考
http://hi.baidu.com/findthegateopen/blog/item/03e5802e19f1ea301e3089f9.html
于是,为了证明什么情况下f(x)%N为N的完全剩余系,我们可以假设0<=i<j<N,且f(i)==f(j),即假设f(x)%N不是N的完全剩余系
可得i*(i-1)/2=j*(j-1)/2 mod N,整理下可得(j-i)*(i+j-1)/2=0 mod N
可以发现,j-i与i+j-1的奇偶性相反
讨论:如果j-i为偶数
(1)如果(j-i)/2为偶数,由于此时i+j-1为奇数,则N=S*2^k(S为正奇数,k>0)
S为i+j-1的因子,2^k为(j-i)/2的因子,但是当S=1时,N=2^k,且必为(j-i)/2的因子,因为它不可能是i+j-1(奇数)的因子,那么j-i=2*N或j-i=0,由于0<=i<j<N,显然不可能,则S其实应该为大于1的奇数
(2)如果(j-i)/2为奇数,由于此时i+j-1也为奇数,则N=P*Q(P,Q为正奇数),可以认为P为(j-i)/2的因子,Q为i+j-1的因子
综述,当N=S*2^k(S>1且S为奇数,k>0),或者N=P*Q(P,Q为正奇数)时,f(x)%N不能构成N的完全剩余系
以上两种情况包含了出N=2^k(k>0)以为的所有情况,所以只有当N=2^k(k>0)时,f(x)%N为N的完全剩余系
总结:
一开始就明确了证明的目标,但是却没想到通过反证法去和定义找矛盾来证明,自己的思维能力还是很差
回顾整个证明过程,其中有很多巧妙的地方,如果没有一定积累,很难会想到,例如N的表示方法和j-i与i+j-1的奇偶性相反
其实所有偶数可以表示为N=S*2^k(S为奇数,k>0)的形式,所有奇数可以表示为N=P*Q(P,Q为奇数)的方式
另外,二进制下判断一个数是否为2的方幂,可以用X&(X-1)来判断,如果结果为0,说明是,否则,说明不是