知道要證明什麼情況下(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,說明是,否則,說明不是