2017-10-24 8 views
0

私は有限体(この例では、p = 3より9の次数のフィールドを使用します)を与えたGP/PARIでプログラムを書こうとしています。すべての要素のキューブをリストに格納します(これは非常に非効率的です)。次に、同じフィールドのポイントでいくつかの関数を評価し、それがこのリストにあるかどうかを調べます(キュービックな残差であるかどうか)。 GP/PARIのリストでこれを達成しようとしていて、setsearchを使用しています。GP/PARIのsetsearch:立方体のテスト

まず、私の既約多項式mod 3を定義することから始めます。次に、9要素のフィールドのすべての要素を3乗してリストに格納します。この多項式環の商として実現されます(ダブルモッズ) 。一度私はこのリストを持って、私は今setsearchで問題に遭遇しています。まず第一に、それはダブルモッズの点でそれを格納しているようです。視覚的には非常に醜いですが、計算ができる限りは気にしません。しかし、それはできないようです。たとえば、0はリストにあるはずですが、setsearchでテストするとfalseが返されます。その理由は、リストにある0がMod(Mod(0,3),rpoly)

というように格納されており、実際にはそうであるようです(下記参照)。しかし、さらに悪いことが起こっています。 >

(15:45) gp > rpoly=Mod(1,3)*(x^2-x-1); 
(15:45) gp > polisirreducible(rpoly) 
%2 = 1 
(15:45) gp > cubic=listcreate(9); 
(15:45) gp > for(a=0,2,for(b=0,2,listput(cubic,Mod(Mod(1,3)*(a*x+b)^3,rpoly)))) 
(15:46) gp > cubic 
%5 = List([Mod(Mod(0, 3), Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3)), Mod(Mod(2, 3), Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3)), Mod(Mod(2, 3)*x + Mod(1, 3), Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3)), Mod(Mod(2, 3)*x + Mod(2, 3), Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3)), Mod(Mod(2, 3)*x, Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3)), Mod(Mod(1, 3)*x + Mod(2, 3), Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3)), Mod(Mod(1, 3)*x, Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3)), Mod(Mod(1, 3)*x + Mod(1, 3), Mod(1, 3)*x^2 + Mod(2, 3)*x + Mod(2, 3))]) 
(15:46) gp > setsearch(cubic,Mod(Mod(0,3),rpoly)) 
%6 = 0 
(15:47) gp > setsearch(cubic,Mod(Mod(0,3)*x+Mod(0,3),rpoly)) 
%7 = 1 

だから、それだけではなく、それは0がリストにあることが、動作していないフィールドを介して実行しているとき0であっても、他の形態は、1が自然に遭遇することを認めることを拒否しているようだ:それは、具体的%7が必要です

どうしてですか?もっと重要なのは、ここで私の目的を達成するためにこれを修正する方法はありますか?

答えて

0

gpは分かりませんが、3次元リストが正しいことを確認できますか?私は次のようになる。

((0x + 0)^3) mod (x^2 - 1x - 1) = 0x + 0 = {0,0} 
((0x + 1)^3) mod (x^2 - 1x - 1) = 0x + 1 = {0,1} 
((0x + 2)^3) mod (x^2 - 1x - 1) = 0x + 2 = {0,2} 
((1x + 0)^3) mod (x^2 - 1x - 1) = 2x + 1 = {2,1} 
((1x + 1)^3) mod (x^2 - 1x - 1) = 2x + 2 = {2,2} 
((1x + 2)^3) mod (x^2 - 1x - 1) = 2x + 0 = {2,0} 
((2x + 0)^3) mod (x^2 - 1x - 1) = 1x + 2 = {1,2} 
((2x + 1)^3) mod (x^2 - 1x - 1) = 1x + 0 = {1,0} 
((2x + 2)^3) mod (x^2 - 1x - 1) = 1x + 1 = {1,1} 

全8の非ゼロ要素は1X + 0の力と考えることができる。

((1x + 0)^0) mod (x^2 - 1x - 1) = 0x + 1 = {0,1} 
((1x + 0)^1) mod (x^2 - 1x - 1) = 1x + 0 = {1,0} 
((1x + 0)^2) mod (x^2 - 1x - 1) = 1x + 1 = {1,1} 
((1x + 0)^3) mod (x^2 - 1x - 1) = 2x + 1 = {2,1} 
((1x + 0)^4) mod (x^2 - 1x - 1) = 0x + 2 = {0,2} 
((1x + 0)^5) mod (x^2 - 1x - 1) = 2x + 0 = {2,0} 
((1x + 0)^6) mod (x^2 - 1x - 1) = 2x + 2 = {2,2} 
((1x + 0)^7) mod (x^2 - 1x - 1) = 1x + 2 = {1,2} 
((1x + 0)^8) mod (x^2 - 1x - 1) = 0x + 1 = {0,1} (sequence repeats) 

そこで乗算または累乗ログと逆対数の同等物を使用して実装することができる:

((2x + 2)^3) => ((1x + 0)^6)^3 => ((1x + 0)^(18 mod 8)) => (1x + 0)^2 => 1x + 1 
関連する問題