Re: [問題] 請問要如何用C++ 設定f(a*b)=f(a)*f(b)?
※ 引述《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)
推
08/10 18:06, , 1F
08/10 18:06, 1F
→
08/10 18:06, , 2F
08/10 18:06, 2F
→
08/10 18:07, , 3F
08/10 18:07, 3F
→
08/10 18:07, , 4F
08/10 18:07, 4F
→
08/10 18:08, , 5F
08/10 18:08, 5F
→
08/10 18:08, , 6F
08/10 18:08, 6F
→
08/10 18:09, , 7F
08/10 18:09, 7F
→
08/10 18:09, , 8F
08/10 18:09, 8F
→
08/10 18:10, , 9F
08/10 18:10, 9F
→
08/10 18:10, , 10F
08/10 18:10, 10F
→
08/10 21:14, , 11F
08/10 21:14, 11F
→
08/10 21:18, , 12F
08/10 21:18, 12F
→
08/11 01:00, , 13F
08/11 01:00, 13F
→
08/11 01:00, , 14F
08/11 01:00, 14F
→
08/11 01:51, , 15F
08/11 01:51, 15F
討論串 (同標題文章)
完整討論串 (本文為第 6 之 6 篇):