質問編集履歴

1

書式の改善

2020/05/03 13:26

投稿

kttt
kttt

スコア3

test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,214 @@
2
2
 
3
3
  コード
4
4
 
5
+ int gcd(long f,long e){
6
+
7
+
8
+
9
+ long r=1;
10
+
11
+
12
+
13
+ while(r!=0){
14
+
15
+ r=f%e;
16
+
17
+ f=e;
18
+
19
+ e=r;
20
+
21
+ }
22
+
23
+
24
+
25
+ return f;
26
+
27
+
28
+
29
+ }
30
+
31
+
32
+
33
+ int main(void){
34
+
35
+
36
+
37
+ long x;
38
+
39
+ long y;
40
+
41
+ long x1 = 1;
42
+
43
+ long x2 = 0;
44
+
45
+ long x3;
46
+
47
+ long y1 = 0;
48
+
49
+ long y2 = 1;
50
+
51
+ long y3;
52
+
53
+ long e;
54
+
55
+ long f;
56
+
57
+ long result1 = e;
58
+
59
+ long result2 = f;
60
+
61
+ long result3;
62
+
63
+ long t;
64
+
65
+ long hirabun;
66
+
67
+ long p;
68
+
69
+ long q;
70
+
71
+ long flag=0;
72
+
73
+ long i;
74
+
75
+ long n;
76
+
77
+
78
+
79
+ long d;
80
+
81
+
82
+
83
+ printf("平文となる数字を入力してください:");
84
+
85
+ scanf("%ld",&hirabun);
86
+
87
+ printf("pを入力してください:");
88
+
89
+ scanf("%ld",&p);
90
+
91
+ printf("qを入力してください:");
92
+
93
+ scanf("%ld",&q);
94
+
95
+ for( i=2;i<p;++i ) {
96
+
97
+ if( p%i==0 ) {
98
+
99
+ flag = 1;
100
+
101
+ break;
102
+
103
+ }
104
+
105
+ }
106
+
107
+
108
+
109
+ if( flag==0 )
110
+
111
+ printf("%ld は素数です。\n",p);
112
+
113
+ else
114
+
115
+ printf("%ld は素数ではありません。\n",p);
116
+
117
+
118
+
119
+ // return 0;
120
+
121
+
122
+
123
+ for( i=2;i<q;++i ) {
124
+
125
+ if( q%i==0 ) {
126
+
127
+ flag = 1;
128
+
129
+ break;
130
+
131
+ }
132
+
133
+ }
134
+
135
+
136
+
137
+ if( flag==0 )
138
+
139
+ printf("%ld は素数です。\n",q);
140
+
141
+ else
142
+
143
+ printf("%ld は素数ではありません。\n",q);
144
+
145
+
146
+
147
+ n=p*q;
148
+
149
+ f=(p-1)*(q-1);
150
+
151
+
152
+
153
+ printf("gcd(f,e)=1となるeを入力してください:");
154
+
155
+ scanf ("%ld",&e);
156
+
157
+ if(gcd(f,e)==1)
158
+
159
+ printf("gcd(f,e)=1です\n");
160
+
161
+ else
162
+
163
+ printf("違います");
164
+
165
+
166
+
167
+ while(1){
168
+
169
+ t = result1 / result2;
170
+
171
+ x3 = x1 - (t*x2);
172
+
173
+ y3 = y1 - (t*y2);
174
+
175
+ result3 = result1 - t*result2;
176
+
177
+ if(result3==1){
178
+
179
+ if(y3<0){
180
+
181
+ return y3+e;
182
+
183
+ }
184
+
185
+ return y3;
186
+
187
+ }
188
+
189
+ x1 = x2;
190
+
191
+ y1 = y2;
192
+
193
+ result1 = result2;
194
+
195
+ x2 = x3;
196
+
197
+ y2 = y3;
198
+
199
+ result2 = result3;
200
+
201
+ }
202
+
203
+ return 0;
204
+
205
+
206
+
207
+ printf("秘密指数dは%ldです\n",x1);
208
+
209
+
210
+
211
+ }
212
+
5
213
  ```### 前提・実現したいこと
6
214
 
7
215
  この場合秘密指数はz2が0のときのx1でいいですよね?
@@ -10,230 +218,4 @@
10
218
 
11
219
 
12
220
 
13
- int gcd(long f,long e){
14
-
15
-
16
-
17
- long r=1;
18
-
19
-
20
-
21
- while(r!=0){
22
-
23
- r=f%e;
24
-
25
- f=e;
26
-
27
- e=r;
28
-
29
- }
30
-
31
-
32
-
33
- return f;
34
-
35
-
36
-
37
- }
38
-
39
-
40
-
41
- int main(void){
42
-
43
-
44
-
45
- long x;
46
-
47
- long y;
48
-
49
- long x1 = 1;
50
-
51
- long x2 = 0;
52
-
53
- long x3;
54
-
55
- long y1 = 0;
56
-
57
- long y2 = 1;
58
-
59
- long y3;
60
-
61
- long e;
62
-
63
- long f;
64
-
65
- long result1 = e;
66
-
67
- long result2 = f;
68
-
69
- long result3;
70
-
71
- long t;
72
-
73
- long hirabun;
74
-
75
- long p;
76
-
77
- long q;
78
-
79
- long flag=0;
80
-
81
- long i;
82
-
83
- long n;
84
-
85
-
86
-
87
- long d;
88
-
89
-
90
-
91
- printf("平文となる数字を入力してください:");
92
-
93
- scanf("%ld",&hirabun);
94
-
95
- printf("pを入力してください:");
96
-
97
- scanf("%ld",&p);
98
-
99
- printf("qを入力してください:");
100
-
101
- scanf("%ld",&q);
102
-
103
- for( i=2;i<p;++i ) {
104
-
105
- if( p%i==0 ) {
106
-
107
- flag = 1;
108
-
109
- break;
110
-
111
- }
112
-
113
- }
114
-
115
-
116
-
117
- if( flag==0 )
118
-
119
- printf("%ld は素数です。\n",p);
120
-
121
- else
122
-
123
- printf("%ld は素数ではありません。\n",p);
124
-
125
-
126
-
127
- // return 0;
128
-
129
-
130
-
131
- for( i=2;i<q;++i ) {
132
-
133
- if( q%i==0 ) {
134
-
135
- flag = 1;
136
-
137
- break;
138
-
139
- }
140
-
141
- }
142
-
143
-
144
-
145
- if( flag==0 )
146
-
147
- printf("%ld は素数です。\n",q);
148
-
149
- else
150
-
151
- printf("%ld は素数ではありません。\n",q);
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
- n=p*q;
160
-
161
- f=(p-1)*(q-1);
162
-
163
-
164
-
165
-
166
-
167
-
168
-
169
- printf("gcd(f,e)=1となるeを入力してください:");
170
-
171
- scanf ("%ld",&e);
172
-
173
- if(gcd(f,e)==1)
174
-
175
- printf("gcd(f,e)=1です\n");
176
-
177
- else
178
-
179
- printf("違います");
180
-
181
-
182
-
183
- while(1){
184
-
185
- t = result1 / result2;
186
-
187
- x3 = x1 - (t*x2);
188
-
189
- y3 = y1 - (t*y2);
190
-
191
- result3 = result1 - t*result2;
192
-
193
- if(result3==1){
194
-
195
- if(y3<0){
196
-
197
- return y3+e;
198
-
199
- }
200
-
201
- return y3;
202
-
203
- }
204
-
205
- x1 = x2;
206
-
207
- y1 = y2;
208
-
209
- result1 = result2;
210
-
211
- x2 = x3;
212
-
213
- y2 = y3;
214
-
215
- result2 = result3;
216
-
217
- }
218
-
219
- return 0;
220
-
221
-
222
-
223
- printf("秘密指数dは%ldです\n",x1);
224
-
225
-
226
-
227
-
228
-
229
-
230
-
231
-
232
-
233
- }
234
-
235
-
236
-
237
-
238
-
239
221
  また質問内容以外でおかしなところがあったらご指摘お願いします。