橢圓曲線的整數點加法的計算問題

2021-09-20 13:30:15 字數 1554 閱讀 7901

橢圓曲線是域上虧格為1的光滑射影曲線。對於特徵不等於2的域,它的仿射方程可以寫成:y^2=x^3+ax^2+bx+c。複數域上的橢圓曲線為虧格為1的黎曼面。mordell證明了整體域上的橢圓曲線是有限生成交換群,這是著名的bsd猜想的前提條件。阿貝爾簇是橢圓曲線的高維推廣

橢圓曲線的普通方程為

橢圓曲線上的點全體構成乙個加法群。

注:在數學中,群是一種代數結構,由乙個集合以及乙個二元運算所組成。已知集合和運算(g,*)如果是群則必須滿足如下要求

封閉性:∀a,b∈g,a*b ∈ g

結合性: ∀a,b,c∈g ,有 (ab)c = a* (b*c)

單位元:ョe∈g, ∀a ∈g,有ea = ae = a

逆元: ∀a ∈g ,ョb∈g 使得 ab = ba = e

橢圓曲線上的點構成加法群,那麼橢圓曲線上的有理點是有限生成的,另一方面,橢圓曲線上的整數點只有有限多個(我也不懂》!

如果已知p(x1,y1)和q(x2,y2),如何求r

解:設有p和q構成的直線方程f為

y=a*x+

那麼p+q可以表示為(x3,-(a*x3+))

那麼 x3=((yq-yp)/(xq-xp))^3-xp-xq

y3=-yp+((yq-yp)/(xq-xp))*(x1-x3)

由此得出l如果p(x1,y1),q(x2,y2),則p+q=(x3,y3)為

x3=k^2-x1-x2(mod p)

y3=k(x1-x3)-y1(mod p)

其中如果p!=q 那麼k=(y2-y1)/(x2-x1)

如果p==q  那麼k=(3*x1^2+a)/(2*y1)

(其中a為y^2=x^3+a*x+b中的x的係數,p滿足4*a^2+27*b^2 mod p !=0)

這裡以y^2=x^3-x為例初始點為(2,7),方法是ip=(i-1)p+p;

#include#include#includeusing namespace std;

//計算橢圓曲線的程式

int a=1;

int b=6;

int p=11;//mod p

int x[10][2]=;

//初始方程的為y^2=x^3+x+6

//通過快速冪求出乙個數的逆

//a-1=a^p-2 mod p

int mod(int a,int b,int c)

return sum;

}int calculate_k(int xp,int yp,int xq,int yq)

int main(int args,char *ar**)

cout<

for(int i=1;i<=9;i++)

cout<

}

橢圓的曲線模擬

圓的模擬只要使用正多邊形就可以實現,主要 如下 private void testcirlce graphics g private listsimulatecircle float x0,float y0,float r,int simulatesidecount return list priv...

橢圓曲線的基本概念

設f是乙個域,a,b in f,則方程 y 2 x 3 ax b 稱為域f上的橢圓曲線。上述方程稱為維爾斯特拉斯方程,其判別式為 y 2 axy by x 3 cx 2 dx e 比如,實數域上的橢圓曲線如下 橢圓曲線上的加法 設f是乙個域,a,b in f,令e cup 其中為無窮遠點,則可以定義...

大數加法(整數的加法

大數加法的原理是利用模擬人計算比較大的數的時候採用的用的一種演算法。實際上就是小學的加法運算,不過是用字元陣列,模擬的運算。思路 1 先定義兩組足夠長的字元陣列,和整形陣列。將數字陣列裡面的元素全部初始化為零。2 然後將輸入的數字字串,轉變為數字,存放在整形陣列內,注意存放時將低位到高位依次存放在陣...