楕円加算について研究しています.
手計算では合っているのにプログラミングにすると違う答えが返ってきてしまいます
ec_double
ec_add
ec_third
Base_10_to_n(X,n)
の関数は問題ないことがわかっているため説明は省略させていただきます.
数字を3進法に直し値が0,1,2ごとにそれぞれ以下のように関数に当てはめるようにしたいと思っています
0の場合はec_third(Q)のみ
1の場合はec_third(Q)からec_add(Q,P),ec_third(Q)
2の場合はec_third(Q)からG2=ec_double(P),ec_add(Q,P)
おそらくbite=2のときが間違えているようです
G2の値は(10,0)が正解です
ご回答宜しくお願い致します
def Base_10_to_n(X,n):3進法に直す if(int(X/n)): return Base_10_to_n(int(X/n),n)+str(X%n) return str(X%n) def third_mathod(P,d): Q=P for bit in Base_10_to_n(d,3)[1:]:#1番目の要素から最後の要素まで取得 Q=ec_third(Q) if bit =="1": Q=ec_add(Q,P) elif bit =="2": P=ec_double(P) Q=ec_add(Q,P) return Q