作者aleyukimo (aleyu)
看板Programming
標題Re: [問題] 請問要如何用C++ 設定f(a*b)=f(a)*f(b)?
時間Mon Aug 10 15:22:34 2009
※ 引述《ggg12345 (ggg)》之銘言:
: 手推導的結果是:
: vector_length min_n
: 2 3
: 3 7
: 4 15
: 5 21
: 6 63
7 2^7-1=127
(k=7時,n=2^7-1=127)
: f^vector_lenth(a) = a * f(a)
: 最短循環數 min_n 顯然跟 (2^vector_length - 1 ) 有關, (0,0...,0)
: 無法循環
: f 是 shift & round-back2
: * 是 vector bit XOR
: 好玩, 可以介紹用途嗎 ?
為了方便,令個數=k
(k=5,代表a b c d e 5個數)
如g大所言,而 n <= 2^k-1
若是n=2^k-1,則會有全值域
我的問題在"k=5"以及"k>=8"的推廣
k=5 f(a)=b f(b)=c f(c)=d f(d)=e
若f(e)=ab,則n=15<2^5-1=31
若f(e)=ac,此時滿足f^n(a)=a n=2^5-1=31
因為需知道
case1 若 f(a1)=a2 f(a2)=a3 f(a3)=a4.....
f(ak)=a1*a2,則k=? 會滿足 n=2^k-1
case2 若不滿足n=2^k-1,則f(ak)=?才會滿足n=2^k-1
case3 若f(ak)無論等於多少都不滿足n=2^k-1
則f(a1)=a2,f(a2)=?,f(a3)=?....會滿足n=2^k-1
但n=7,就需驗算很多項
而n=8,需要更多項.....
所以想藉助電腦的程式,[從結果中找出規則]
(若有數學的式子,證明結果當然是最好的)
用途在於拉丁方陣的推廣(正交拉丁方陣)
謝謝
麻煩各位了 非常感激...
※ 編輯: aleyukimo 來自: 140.127.71.25 (08/10 17:08)
推 LPH66:拉丁方陣啊...完全沒想過會扯上關係 @_@ 140.112.30.84 08/10 18:06
→ LPH66:關於Galois Field(有限體)中文的資源不好找 140.112.30.84 08/10 18:06
→ LPH66:不排斥看英文的話英文維基可以去看看 140.112.30.84 08/10 18:07
→ LPH66:然後抱歉潑你一桶冷水 140.112.30.84 08/10 18:08
→ LPH66:你要的東西已經有理論去求了 140.112.30.84 08/10 18:08
→ LPH66:以n=5的例子 a*c,a*d,a*b*c*d,a*b*c*e, 140.112.30.84 08/10 18:09
→ LPH66:a*b*d*e,a*c*d*e 是僅有的6個符合條件的設定 140.112.30.84 08/10 18:09
→ LPH66:以有限體裡的術語來說 140.112.30.84 08/10 18:10
→ LPH66:這些和 primitive polynomial 有著直接關係 140.112.30.84 08/10 18:10
→ aleyukimo:不好意思 可以麻煩讓我知道是怎麼出來嗎 140.127.71.25 08/10 21:14
→ aleyukimo:我需要的就是找理論以應用.非常感謝你 140.127.71.25 08/10 21:18
→ aleyukimo:L大你好,請問前一篇x^5+x+1要如何判斷 140.127.71.25 08/11 01:00
→ aleyukimo:是否為題目所要求的n=2^k-1 140.127.71.25 08/11 01:00
→ aleyukimo:非常感謝L大 我有頭緒了 敬上萬分謝意 140.127.71.25 08/11 01:51