質問編集履歴

4

誤字

2018/10/18 10:24

投稿

apeirogon0813
apeirogon0813

スコア117

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  標準入力で与えられる整数 n に対し,フィボナッチ数列の n 番め Fn を 2018 で割った余りを標準出力に
14
14
 
15
- 出力するプログラムを作成せよ.ただし,n は 109 以下の正の整数であると仮定してよい.
15
+ 出力するプログラムを作成せよ.ただし,n は 10^9 以下の正の整数であると仮定してよい.
16
16
 
17
17
  入力例       出力例
18
18
 

3

誤字

2018/10/18 10:24

投稿

apeirogon0813
apeirogon0813

スコア117

test CHANGED
File without changes
test CHANGED
@@ -122,21 +122,15 @@
122
122
 
123
123
  struct golden x = { 1, -1 };
124
124
 
125
- struct golden y = { 1, -1 };
126
-
127
125
  int i,n;
128
126
 
129
127
  scanf("%d", &n);
130
-
131
- for(i=1; i <= n-1; i++){
132
128
 
133
129
  x = power_golden(x, i);
134
130
 
135
131
  printf("%lld\n", x.a);
136
132
 
137
- x = y;
138
133
 
139
- }
140
134
 
141
135
  return 0;
142
136
 

2

誤字

2018/10/18 10:08

投稿

apeirogon0813
apeirogon0813

スコア117

test CHANGED
@@ -1 +1 @@
1
- フィボナッチ数列のn番目の剰余を求める時、値が大きくなってしまうと計算が正しく出力されてしいます
1
+ フィボナッチ数列のn番目の剰余を求める時、値が大きくなってしまうと計算が正しく出力されません
test CHANGED
File without changes

1

ソースコードの貼り付け

2018/10/18 09:28

投稿

apeirogon0813
apeirogon0813

スコア117

test CHANGED
File without changes
test CHANGED
@@ -45,3 +45,103 @@
45
45
  おそらく値がマイナスのものに剰余を行ってしまっているからだと思うんですが、
46
46
 
47
47
  改善方法が思い当たらないのでご教示願います。
48
+
49
+ ```C言語
50
+
51
+ include<stdio.h>
52
+
53
+ int number = 0;
54
+
55
+
56
+
57
+ struct golden {
58
+
59
+ long long int a;
60
+
61
+ long long int b;
62
+
63
+ };
64
+
65
+
66
+
67
+ struct golden mult_golden(struct golden x, struct golden y) {
68
+
69
+ number += 1;
70
+
71
+ struct golden z;
72
+
73
+ z.a = (((x.a % 2018) * (y.a % 2018)) % 2018 + ((x.b % 2018) * (y.b % 2018)) %\
74
+
75
+ 2018) % 2018;
76
+
77
+ z.b = (((x.a % 2018) * (y.b % 2018)) % 2018 + ((x.b % 2018) * (y.a % 2018)) %\
78
+
79
+ 2018 + ((x.b % 2018) * (y.b % 2018)) % 2018) % 2018;
80
+
81
+ return z;
82
+
83
+ }
84
+
85
+
86
+
87
+ struct golden power_golden(struct golden x, int n) {
88
+
89
+ struct golden z;
90
+
91
+
92
+
93
+ if(n == 0) {
94
+
95
+ z.a = 1;
96
+
97
+ z.b = 0;
98
+
99
+ return z;
100
+
101
+ } else if(n % 2 == 0) {
102
+
103
+ z = power_golden(x, n/2);
104
+
105
+ return mult_golden(z, z);
106
+
107
+ } else {
108
+
109
+ z = power_golden(x, n-1);
110
+
111
+ return mult_golden(z, x);
112
+
113
+ }
114
+
115
+ }
116
+
117
+
118
+
119
+ int main(void)
120
+
121
+ {
122
+
123
+ struct golden x = { 1, -1 };
124
+
125
+ struct golden y = { 1, -1 };
126
+
127
+ int i,n;
128
+
129
+ scanf("%d", &n);
130
+
131
+ for(i=1; i <= n-1; i++){
132
+
133
+ x = power_golden(x, i);
134
+
135
+ printf("%lld\n", x.a);
136
+
137
+ x = y;
138
+
139
+ }
140
+
141
+ return 0;
142
+
143
+ }
144
+
145
+
146
+
147
+ ```