回答編集履歴

3

追記

2018/08/11 11:53

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
 
47
- static void func2(final int num) {
47
+ static void func(final int num) {
48
48
 
49
49
  HashSet<Integer> primes = new LinkedHashSet<>();
50
50
 

2

追記

2018/08/11 11:53

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -16,7 +16,75 @@
16
16
 
17
17
 
18
18
 
19
- 素数は重複値が存在しないので、[HashSet](https://docs.oracle.com/javase/jp/8/docs/api/java/util/HashSet.html)や[BitSet](https://docs.oracle.com/javase/jp/9/docs/api/java/util/BitSet.html)を使ってくださいな。
19
+ 素数は重複値が存在しないので、[LinkedHashSet](https://docs.oracle.com/javase/jp/8/docs/api/java/util/LinkedHashSet.html)や[BitSet](https://docs.oracle.com/javase/jp/9/docs/api/java/util/BitSet.html)を使ってくださいな。
20
+
21
+
22
+
23
+ ```Java
24
+
25
+ static boolean isPrime(final int x) {
26
+
27
+ // 平方根まで判定すれば、良いです。
28
+
29
+ final double sqrtNum = Math.sqrt(x);
30
+
31
+ for (int i = 3; i <= sqrtNum; i += 2) {
32
+
33
+ if (x % i == 0) {
34
+
35
+ return false;
36
+
37
+ }
38
+
39
+ }
40
+
41
+ return true;
42
+
43
+ }
44
+
45
+
46
+
47
+ static void func2(final int num) {
48
+
49
+ HashSet<Integer> primes = new LinkedHashSet<>();
50
+
51
+ primes.add(2);// 最初の素数2を初期値として格納しておく
52
+
53
+ int i = 1;// 最初のループでi=1+2=3となり3から素数判定する
54
+
55
+ int last_prime = 0;
56
+
57
+ while (primes.size() < num) {
58
+
59
+ i += 2;// 偶数をスキップ
60
+
61
+ if (isPrime(i)) {
62
+
63
+ primes.add(i);
64
+
65
+ last_prime = i;
66
+
67
+ }
68
+
69
+ }
70
+
71
+ // sizeを使わなくても、引数のnumと最後の素数を変数に退避しておけばよいです。
72
+
73
+ System.out.println(num + ":" + last_prime);
74
+
75
+ }
76
+
77
+ ```
78
+
79
+ 10001:104743
80
+
81
+ 22ms
82
+
83
+
84
+
85
+ ■参考情報
86
+
87
+ [エラトステネスの篩で調べる 素数判定の上限と平方根の関係性](http://szarny.hatenablog.com/entry/2017/09/28/003352)
20
88
 
21
89
 
22
90
 

1

追記

2018/08/11 11:52

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,4 +1,4 @@
1
- [ArrayList](https://docs.oracle.com/javase/jp/9/docs/api/java/util/ArrayList.html)は要素が動的に変更できる点以外は配列と同じなので存在チェックは配列と同じで内部の要素を全部たどります。
1
+ [ArrayList](https://docs.oracle.com/javase/jp/9/docs/api/java/util/ArrayList.html)は要素が動的に変更できる点以外は配列と同じなので存在チェックは配列と同じで内部の要素を全部たどります。
2
2
 
3
3
 
4
4