teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

コードミス

2021/01/15 04:08

投稿

kyamamama
kyamamama

スコア4

title CHANGED
File without changes
body CHANGED
@@ -9,13 +9,13 @@
9
9
  return str(X%n)
10
10
 
11
11
 
12
- def third_mathod(P,d):
12
+ def third_mathod(d):
13
13
  bin_str=Base_10_to_n(d,3)
14
14
  Q="2" if bin_str[0]==1 else "3"
15
15
  return Q
16
16
 
17
17
 
18
- print(third_mathod(G,3))#3
18
+ print(third_mathod(3))#3
19
19
  ```
20
20
 
21
21
  以下のように返ってくるので,関数Base_10_to_nは問題ないのかと....

3

コードミス

2021/01/15 04:07

投稿

kyamamama
kyamamama

スコア4

title CHANGED
File without changes
body CHANGED
@@ -11,12 +11,10 @@
11
11
 
12
12
  def third_mathod(P,d):
13
13
  bin_str=Base_10_to_n(d,3)
14
- if bin_str[0]==1:
15
- Q = "2"
16
- else :Q="3"
14
+ Q="2" if bin_str[0]==1 else "3"
17
-
18
15
  return Q
19
16
 
17
+
20
18
  print(third_mathod(G,3))#3
21
19
  ```
22
20
 

2

コードミス

2021/01/15 04:06

投稿

kyamamama
kyamamama

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- 楕円加算について 分岐
1
+ if文 条件の付け方
body CHANGED
@@ -1,112 +1,26 @@
1
- 楕円加算につい研究しています
1
+ if文の分岐で困っています
2
+ 以下のようにプログラミングを組んだとき,なぜか結果が「3」と返ってしまいます
2
- おそらく、最後のdef third_mathod(P,d)問題が起きてるのだ思うのですが、解決策見つらず困ってます.
3
+ bin_str[0]=1Q=2を返せと組みたいと考えていますが、どこのでしょうか?
3
- 3進法に直たdをBase_10_to_n(d,3)とし,Base_10_to_n(d,3)[0]が1または2のときで初期値を変えるとうことをたいと考えています.
4
+ ご回答よろくお願いします
4
-
5
-
6
-
7
5
  ```ここに言語を入力
8
- #Fp上のy-2=x^3+ax+yでの
9
- p,a,b=11,1,2
10
- G=(1,2)
11
- def inv(n,p):#inv(obj)objのビット単位反転を返す
12
- return pow(n,p-2,p)
13
-
14
- def div(c,w):
15
- return(c*inv(w,p))%p
16
-
17
- def ec_double(A):#P=Qのとき
18
- if A[0]==float("infinity"):
19
- x=float('infinity')
20
- y=float('infinity')
21
-
22
- else:
23
- l=div(3*A[0]**2+a,2*A[1])
24
- if l==0:
25
- x=float('infinity')
26
- y=float('infinity')
27
- else:
28
- x=(l**2-A[0]-A[0])%p
29
- y=(l*(A[0]-x)-A[1])%p
30
- return x,y
31
-
32
-
33
- def ec_add(A,B):
34
- if A[0]==B[0] and A[1]==B[1]:
35
- l=div(3*A[0]**2+a,2*A[1])
36
- x=(l**2-A[0]-A[0])%p
37
- y=(l*(A[0]-x)-A[1])%p
38
-
39
- elif A[0]==B[0] and A[1]!=B[1]:
40
- x=float('infinity')
41
- y=float('infinity')
42
-
43
- elif A[0]==float('infinity'):
44
- x=B[0]
45
- y=B[1]
46
-
47
- elif B[0]==float('infinity'):
48
- x=A[0]
49
- y=A[1]
50
-
51
- else:
52
- l=div(B[1]-A[1],B[0]-A[0])
53
- x=(l**2-A[0]-B[0])%p
54
- y=(l*(A[0]-x)-A[1])%p
55
- return x,y
56
-
57
-
58
- def ec_third(A):
59
- if A[0]==float('infinity'):
60
- x=float('infinity')
61
- y=float('infinity')
62
-
63
- elif A[1]==0:
64
- x=A[0]
65
- y=A[1]
66
-
67
- else:
68
- t=div(3*A[0]**2+a,2*A[1])
69
- l=div(2*A[1]-t*(3*A[0]-t**2),3*A[0]-t**2)
70
- if l==0:
71
- x=float('infinity')
72
- y=float('infinity')
73
- else:
74
- x=(l**2-t**2+A[0])%p
75
- y=(l*(2*t**2-3*A[0]-l**2)-(t*(3*A[0]-t**2)-A[1]))%p
76
- return x,y
77
-
78
- def Base_10_to_n(X,n):
6
+ def Base_10_to_n(X,n):#3進法に直す
79
7
  if(int(X/n)):
80
8
  return Base_10_to_n(int(X/n),n)+str(X%n)
81
9
  return str(X%n)
82
10
 
83
11
 
84
12
  def third_mathod(P,d):
85
- Q = P if Base_10_to_n(d,3)[0] == 1 else ec_double(P)
86
- for bit in Base_10_to_n(d,3)[1:]:#1番目の要素から最後の要素まで取得
13
+ bin_str=Base_10_to_n(d,3)
87
- Q=ec_third(Q)
14
+ if bin_str[0]==1:
88
- if bit =="1":
15
+ Q = "2"
89
- Q=ec_add(Q,P)
16
+ else :Q="3"
90
- else:
17
+
91
- Q=ec_add(Q,P)
92
- Q=ec_add(Q,P)
93
18
  return Q
94
19
 
95
- G1=third_mathod(G,1)
96
- G2=third_mathod(G,2)
97
- G3=third_mathod(G,3)
20
+ print(third_mathod(G,3))#3
98
- print(G1)#(10,0)
99
- print(G2)#(10,0)
100
- print(G3)#(10,0)
101
21
  ```
22
+
102
- 本当答えら(1,2),(10,0).(1,9)になります
23
+ 以下ように返ってくるので,関数Base_10_to_n問題ないの....
103
- ちなみに
104
24
  ```ここに言語を入力
105
- Q = P if Base_10_to_n(d,3)[0] == 1 else ec_double(P)
25
+ print(Base_10_to_n(3,3)[0])#1
106
- ```
26
+ ```
107
- の文を
108
- ```ここに言語を入力
109
-  Q=P
110
- ```
111
- のみにした場合初期値がすべて一緒になってしまうのでG3(=10)とG6(=20)の値が一緒になってしまいます(()の中は3進法).Q=Pのみ組んだ場合,手計算でBase_10_to_n(d,3)[0]=1のときは値が一致しているのでdef third_mathod(P,d)以外の関数には問題はないと思います.
112
- わかりにくい説明ですいません、ご回答よろしくお願いします

1

誤字

2021/01/15 04:03

投稿

kyamamama
kyamamama

スコア4

title CHANGED
File without changes
body CHANGED
@@ -108,5 +108,5 @@
108
108
  ```ここに言語を入力
109
109
   Q=P
110
110
  ```
111
- のみにした場合初期値がすべて一緒になってしまうのでG3(=10)とG6(=20)の値が一緒になってしまいます(()の中は3進法).手計算でBase_10_to_n(d,3)[0]=1のときは値が一致しているのでdef third_mathod(P,d)以外の関数には問題はないと思います.
111
+ のみにした場合初期値がすべて一緒になってしまうのでG3(=10)とG6(=20)の値が一緒になってしまいます(()の中は3進法).Q=Pのみ組んだ場合,手計算でBase_10_to_n(d,3)[0]=1のときは値が一致しているのでdef third_mathod(P,d)以外の関数には問題はないと思います.
112
112
  わかりにくい説明ですいません、ご回答よろしくお願いします