最近學習了一下SageMath中的函數,在這裏做個筆記,以供大家學習和參考。
1. random_prime(n,proof=None,lbound=2)
-
該函數返回一個隨機數 介於 lbound 和 n 之間,即從小於或等於n的素數集中隨機選擇返回的素數p。
-
其中proof : bool類型或None(默認值:None)如果爲False,則該函數使用僞素數測試,對於真正大的數,該測試快得多,但不提供素數證明。 如果爲None,則使用全局默認值(請參閱“ sage.structure.proof.proof”)
2. FiniteField()
-
該函數返回給定階數的全局唯一有限域,該域具有由給定名稱標記的生成器,並可能帶有給定模數。
-
別名:您也可以使用“ GF”代替“ FiniteField”,它們是相同的。
-
參數:
-
order:一個素數
-
name: 字符串,可選。請注意,省略變量名稱時(創建擴展字段)可能會有很大的速度損失,因爲這樣做會觸發僞Conway多項式的計算,以定義素數字段擴展的連貫格。速度懲罰隨着延伸度的大小和延伸度的因素的數量而增加。
-
modulus: (可選)字段的定義多項式,或指定用於生成此類多項式的算法的字符串。如果“ modulus”是字符串,則將其作爲參數“ algorithm”傳遞給“ irreducible_element()”;有關該參數的允許值,請參見此處。特別是,您可以指定“ modulus =” primitive“”以獲得基本多項式。如果不指定變量名,則可以不指定模數。
-
impl:(可選)一個字符串,用於指定有限域的實現。可能的值爲:
- modn:以p爲模的整數環(僅適用於素數字段)。
- givaro:僅適用於最多65521個元素的字段)。
- ntl:-使用GF2X的NTL(僅在特徵2中)。
- pari or pari_ffelt:PARI的“ FFELT”類型(僅適用於 擴展字段)。
-
elem_cache: 默認值:order <500)緩存所有元素以避免創建時間;除非“ impl =‘givaro’”被忽略
-
repr: (默認:“‘poly’”)被忽略,除非“ impl =‘givaro’”;控制元素向用戶打印的方式:
- log: repr爲“ log_repr()
- int: repr是“ int_repr()
- poly: repr是“ poly_repr()
-
check_irreducible:驗證多項式模數是不可約的
-
proof:如果爲“ True”,則使用可證明素性檢驗否則只能使用僞素數檢驗。
3. EllipticCurve()
- 該函數的作用是構造一條橢圓曲線。
在Sage中,橢圓曲線始終由一個較長的Weierstrass方程(的係數)指定
y ^ 2 + a_1 xy + a_3 y = x ^ 3 + a_2 x ^ 2 + a_4 x + a_6。
輸入:
有幾種方法可以構建橢圓曲線:
-
“ EllipticCurve([a1,a2,a3,a4,a6])”:具有給定a不變量的橢圓曲線。不變量被強制爲一個公共父代。如果都是整數,則將它們強制轉換爲有理數。
-
“ EllipticCurve([a4,a6])”:與上述相同,但a_1 = a_2 = a_3 = 0。
-
“ EllipticCurve(label)”:使用給定的標籤從Cremona數據庫返回QQ上的橢圓曲線。標籤是字符串,例如““ 11a”“或”“ 37b2”“。標籤中的字母*必須爲小寫(Cremona的新標籤)。
-
“ EllipticCurve(R,[a1,a2,a3,a4,a6])”:使用給定的a不變量在R上創建橢圓曲線。儘管大多數功能僅在字段上實現,但此處R可以是任意交換環。
-
“ EllipticCurve(j = j0)”或“ EllipticCurve_from_j(j0)”:返回一個j不變爲“ j0”的橢圓曲線。
-
“ EllipticCurve(polynomial)”:從多項式係數中讀取a不變式,請參閱“ EllipticCurve_from_Weierstrass_polynomial()”。
-
“ EllipticCurve(cubic,point)”:由平面三次方(三個變量的齊次多項式)定義的橢圓曲線,帶有有理點。除了給出長度爲2或5的* list 列表之外,還可以給出係數給一個元組*。