構造乙個\(n\)元有限域,若不存在輸出-1,否則域中元素分別用\(0, 1, 2, \ldots, n - 1\)表示,輸出加法表和乘法表。
\(n \leq 343\)。
你我真的會域擴張嗎?答:不會
首先,根據一些基礎知識,有解當且僅當\(n = p ^ d\),其中\(p \in \mathbb\)。
其次,根據域擴張的知識,我們要構造的\(\text(p ^ d)\)一定是由素域\(\text(p)\)有限擴張而來的。
考察在\(\text(p)\)下的代數擴張,即假設存在乙個\(\text(p)[[x]]\)下的不可約多項式\(f(x)\),設\(\zeta\)是這個多項式的乙個根,那麼\(\text(p ^ d)\)中的所有元素可以唯一表示成乙個多項式
\[a_0 + a_1 \zeta + a_2 ^ 2 + \ldots + a_ ^ \ (a_i \in \text(p))
\](實際上是基\(1, \zeta, ^ 2, \ldots, ^ \)的線性組合)
假設我們最後要輸出的是這些多項式的加法表和乘法表,那麼問題就轉化為了找到乙個合適的加法運算和乘法運算。
加法就是在域\(\text(p)[[x]]\)下的多項式加法,乘法就是在域\(\text(p)[[x]]\)下的多項式乘法。
但是多項式乘法會導致使用的基的大小變大,我們需要把基的大小縮到\(d\)。
考慮可以應用線性組合\(f(\zeta) = 0\)。
對於乙個多項式,加上或減去\(k\)倍的\(f(\zeta)\)(\(k \in \text(p)[[x]]\)),代入\(\zeta\)求值不變。
那麼對於乙個多項式,如果次數超過了\(d - 1\),可以將它對\(f(\zeta)\)取模,得到的結果是乙個次數小於等於\(d - 1\)的多項式(即基的大小縮到了\(d\)),並且代入\(\zeta\)後值和原多項式值相等。
現在考慮的是我們輸出的是乙個數表而不是多項式表,考慮到要把多項式\(f\)對映到數\(f\),並且要求這個對映可逆。
如果有辦法可以把\(\zeta\)搞出來,那麼當然可以直接將\(f\)對映到\(f(\zeta)\)上,這是個同構對映,顯然可逆。
但是求\(\zeta\)是不現實的,我們退而求其次,找乙個要求不太高的可逆對映即可,比如把多項式\(f\)的係數看做數\(f\)在\(p\)進製下每一位的值,可以驗證這是可行的。
複雜度\(\mathcal o(n ^ 2 ^ 2 n)\)。
#include using namespace std;
typedef vector poly;
const int n = 360, m = 10;
const int r[7][8] = , // 2, 4, 8, 16, 32, 64, 128, 256
, // 3, 9, 27, 81, 243
, // 5, 25, 125
, // 7, 49, 343
, // 11, 121
, // 13, 169
, // 17, 289
};int n, id[n], vis[n]; vector pr;
void sieve ()
} }}namespace gf
elem compress (const poly &r)
return *this;
} poly expand (elem e)
return r;
} elem operator + (const elem &o)
return compress(f);
} elem operator * (const elem &o)
}for (int i = (d - 1) << 1; i > d - 1; --i)
}return compress(h);
} } ;
void get_poly ()
}} using namespace gf;
int main ()
} if (n == 1) else
} for (int i = 0; i < n; ++i)
} }return 0;}/*
4 : x ^ 2 + x + 1 (111)2 = 7
8 : x ^ 3 + x + 1 (1011)2 = 11
9 : x ^ 2 + 1 (101)3 = 10
25 : x ^ 2 + 2 (102)5 = 27
27 : x ^ 3 + 2x + 1 (1021)3 = 34
81 : x ^ 4 + x + 2 (10012)3 = 86
121: x ^ 2 + 1 (101)11 = 122
125: x ^ 3 + x + 1 (1011)5 = 131
169: x ^ 2 + 2 (102)13 = 171
128: x ^ 7 + x + 1 (10000011)2 = 131
243: x ^ 5 + 2x + 1 (1000021)3 = 250
256: x ^ 8 + x ^ 4 + x ^ 3 + x + 1 (100011011)2 = 283
343: x ^ 3 + 2 (1002)7 = 345
*/
2016 大學老友小聚
在閒暇之餘,約上兩三好友,暢聊著各自對生活和工作上的感悟,大概是世界上最幸福的事情之一吧。這次端午小假,與3位大學好友聚在一起,促膝長談。頓時感覺回到了大學時光,一切是那麼的舒服。工作幾年,各自都有了自己的家庭和朋友圈子,要擠出時間,湊在一起,居然變得如此困難。我們一起回憶著青春,聊著其他幾位同學的...
2016大學裡的流年回憶
入大學之前,由於沉迷遊戲,而選擇計算機專業,意在自己也想做出乙個吊炸天的網遊,我相信大部分師弟和師妹都是這麼過來的。來到大學,對it一無所知,只是抱著自己能做出遊戲的心態開始了大學的上課之旅。每天準時上課準時下課,每天按時完成作業,心情甚是開心。大一第一學期的課程 思修 高數 電子電路 英語 c語言...
頂點計畫1 3 大學戀愛調研
我是頂點計畫1 3小組小組成員 我們小組的調研話題為 我眼中的大學戀愛 調研原因及目的 觀察到現實中有很多人跟異 流很少 尤其是男生 卻有一大部分人幻想甜甜的戀愛。調查形式 線上調查,採取問卷形式。第一次調研 對於那些在戀愛中的同學祝他們999嗷!看得出來很多男生女生都有心目中的傾慕物件,但他們中的...