2010-01-28 71 views
0

我想在c#中乘以gf(2)中的2個多項式。請幫忙。GF(2)中的乘法多項式

+2

您需要提供更多關於您遇到的問題的信息。這是數學嗎?它是否轉換爲代碼?你的代碼是否會拋出一個錯誤? – Oded 2010-01-28 11:22:03

回答

4

您可能想要使用按位運算符,並使用ulonguint類型來表示多項式。也就是說,如果P (GF(2))是可接受的。如果沒有,你將不得不使用其他一些技巧。

ulong a, b; 
// Compute r = x * y 
ulong r = 0; 
for (uint i = 0; i < 64; ++i) { 
    if ((a & (1 << i)) != 0) { 
     r ^= b << i; 
    } 
} 

表示的總結:

  • z & (1 << i)選擇從xŽ係數(x)的
  • r ^= b << i計算R'(X)= R(X)+ B( x)* x i

聲明:我不是C#程序員。

2

好的。

  • 定義表示伽羅瓦域的類。
  • 定義了一個表示一個字段上的多項式的類。
  • 定義多項式的乘法運算符
  • 然後就完成了。

也許您可以更清楚地瞭解您遇到問題的步驟。

0

哇,這是一個很大的問題,這主要取決於您必須使用的字段的類型。

一個很好的介紹是Sage的manual page有限域計算。

執行摘要:對於小型領域(| F | )通過Givaro C++庫使用Zech日誌表。對於更大的領域使用PARI。特徵2的字段(這是你需要的)使用NTL

關於字段實現的文章是available at ACM,它描述了Maxima計算機代數系統是如何完成的。

但如果你只需要一個小玩具圖書館在爲家庭作業領域的因素多項式這裏就是我會做:

  1. 創建它代表一個多項式的一類,它應該增加繁殖和分裂多項式。多項式很容易表示爲一個數組。使多項式類成爲通用類,如Polynomial<coefficient_type>
  2. 創建一個代表組Z p的類,對於素數p。這個類將是多項式的係數。使用Z 爲您的領域。
  3. 創建一個影響多項式的類。
  4. 若要表示GF(p k)找到k次不可約多項式,並且所有多項式的次數最多爲k的項目Z p是您的元素。
  5. 添加他們很容易(添加係數,他們已經Z軸 p
  6. 兩個多項式乘法後,請確保你把結果在模選擇4的不可約多項式。

因此,您將實現一個通用的簡單程序,它可以在所有有限域上添加和乘上元素!