質問編集履歴

2

longest_collatz関数を追加

2020/08/12 07:20

投稿

Y.R.T
Y.R.T

スコア42

test CHANGED
File without changes
test CHANGED
@@ -7,6 +7,66 @@
7
7
 
8
8
 
9
9
  ```
10
+
11
+ std::pair<unsigned long long, long> longest_collatz(unsigned long long const limit)
12
+
13
+ {
14
+
15
+ long length = 0;
16
+
17
+ unsigned long long number = 0;
18
+
19
+
20
+
21
+ std::vector<int> cache(limit + 1, 0);
22
+
23
+
24
+
25
+ for (unsigned long long i = 2; i <= limit; i++)
26
+
27
+ {
28
+
29
+ auto n = i;
30
+
31
+ long steps = 0;
32
+
33
+ while (n != 1 && n >= i)
34
+
35
+ {
36
+
37
+ if ((n % 2) == 0)
38
+
39
+ n = n / 2;
40
+
41
+ else
42
+
43
+ n = n * 3 + 1;
44
+
45
+ steps++;
46
+
47
+ }
48
+
49
+ cache[i] = steps + cache[n];
50
+
51
+
52
+
53
+ if (cache[i] > length)
54
+
55
+ {
56
+
57
+ length = cache[i];
58
+
59
+ number = i;
60
+
61
+ }
62
+
63
+ }
64
+
65
+
66
+
67
+ return std::make_pair(number, length);
68
+
69
+ }
10
70
 
11
71
  int main()
12
72
 

1

d.stepをd.stepsに修正

2020/08/12 07:20

投稿

Y.R.T
Y.R.T

スコア42

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  if (result.first != d.start || result.second != d.steps)
4
4
 
5
- のd.stepはどういう意味ですか?
5
+ のd.stepsはどういう意味ですか?
6
6
 
7
7
 
8
8