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

質問編集履歴

1

書式の改善

2020/05/03 13:26

投稿

kttt
kttt

スコア3

title CHANGED
File without changes
body CHANGED
@@ -1,47 +1,43 @@
1
1
  ``言語はc言語です
2
2
  コード
3
- ```### 前提・実現したいこと
4
- この場合秘密指数はz2が0のときのx1でいいですよね?
3
+ int gcd(long f,long e){
5
4
 
5
+ long r=1;
6
6
 
7
- int gcd(long f,long e){
7
+ while(r!=0){
8
+ r=f%e;
9
+ f=e;
10
+ e=r;
11
+ }
8
12
 
9
- long r=1;
13
+ return f;
10
14
 
11
- while(r!=0){
12
- r=f%e;
13
- f=e;
14
- e=r;
15
- }
16
-
17
- return f;
18
-
19
15
  }
20
16
 
21
17
  int main(void){
22
18
 
23
- long x;
19
+ long x;
24
- long y;
20
+ long y;
25
- long x1 = 1;
21
+ long x1 = 1;
26
- long x2 = 0;
22
+ long x2 = 0;
27
- long x3;
23
+ long x3;
28
- long y1 = 0;
24
+ long y1 = 0;
29
- long y2 = 1;
25
+ long y2 = 1;
30
- long y3;
26
+ long y3;
31
- long e;
27
+ long e;
32
- long f;
28
+ long f;
33
- long result1 = e;
29
+ long result1 = e;
34
- long result2 = f;
30
+ long result2 = f;
35
- long result3;
31
+ long result3;
36
- long t;
32
+ long t;
37
- long hirabun;
33
+ long hirabun;
38
- long p;
34
+ long p;
39
- long q;
35
+ long q;
40
- long flag=0;
36
+ long flag=0;
41
- long i;
37
+ long i;
42
- long n;
38
+ long n;
43
39
 
44
- long d;
40
+ long d;
45
41
 
46
42
  printf("平文となる数字を入力してください:");
47
43
  scanf("%ld",&hirabun);
@@ -50,71 +46,66 @@
50
46
  printf("qを入力してください:");
51
47
  scanf("%ld",&q);
52
48
  for( i=2;i<p;++i ) {
53
- if( p%i==0 ) {
49
+ if( p%i==0 ) {
54
- flag = 1;
50
+ flag = 1;
55
- break;
51
+ break;
56
- }
52
+ }
57
- }
53
+ }
58
54
 
59
- if( flag==0 )
55
+ if( flag==0 )
60
- printf("%ld は素数です。\n",p);
56
+ printf("%ld は素数です。\n",p);
61
- else
57
+ else
62
- printf("%ld は素数ではありません。\n",p);
58
+ printf("%ld は素数ではありません。\n",p);
63
59
 
64
60
  // return 0;
65
61
 
66
- for( i=2;i<q;++i ) {
62
+ for( i=2;i<q;++i ) {
67
- if( q%i==0 ) {
63
+ if( q%i==0 ) {
68
- flag = 1;
64
+ flag = 1;
69
- break;
65
+ break;
70
- }
66
+ }
71
- }
67
+ }
72
68
 
73
- if( flag==0 )
69
+ if( flag==0 )
74
- printf("%ld は素数です。\n",q);
70
+ printf("%ld は素数です。\n",q);
75
- else
71
+ else
76
- printf("%ld は素数ではありません。\n",q);
72
+ printf("%ld は素数ではありません。\n",q);
77
73
 
74
+ n=p*q;
75
+ f=(p-1)*(q-1);
78
76
 
77
+ printf("gcd(f,e)=1となるeを入力してください:");
78
+ scanf ("%ld",&e);
79
+ if(gcd(f,e)==1)
80
+ printf("gcd(f,e)=1です\n");
81
+ else
82
+ printf("違います");
79
83
 
80
- n=p*q;
84
+ while(1){
85
+ t = result1 / result2;
86
+ x3 = x1 - (t*x2);
87
+ y3 = y1 - (t*y2);
88
+ result3 = result1 - t*result2;
81
- f=(p-1)*(q-1);
89
+ if(result3==1){
90
+ if(y3<0){
91
+ return y3+e;
92
+ }
93
+ return y3;
94
+ }
95
+ x1 = x2;
96
+ y1 = y2;
97
+ result1 = result2;
98
+ x2 = x3;
99
+ y2 = y3;
100
+ result2 = result3;
101
+ }
102
+ return 0;
82
103
 
104
+ printf("秘密指数dは%ldです\n",x1);
83
105
 
84
-
85
- printf("gcd(f,e)=1となるeを入力してください:");
86
- scanf ("%ld",&e);
87
- if(gcd(f,e)==1)
88
- printf("gcd(f,e)=1です\n");
89
- else
90
- printf("違います");
91
-
92
- while(1){
93
- t = result1 / result2;
94
- x3 = x1 - (t*x2);
95
- y3 = y1 - (t*y2);
96
- result3 = result1 - t*result2;
97
- if(result3==1){
98
- if(y3<0){
99
- return y3+e;
100
- }
101
- return y3;
102
- }
103
- x1 = x2;
104
- y1 = y2;
105
- result1 = result2;
106
- x2 = x3;
107
- y2 = y3;
108
- result2 = result3;
109
- }
110
- return 0;
111
-
112
- printf("秘密指数dは%ldです\n",x1);
113
-
114
-
115
-
116
-
117
106
  }
107
+ ```### 前提・実現したいこと
108
+ この場合秘密指数はz2が0のときのx1でいいですよね?
118
109
 
119
110
 
120
111
  また質問内容以外でおかしなところがあったらご指摘お願いします。