回答編集履歴

1

エラストネスの篩を使った実装例を追記

2020/07/15 01:30

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -29,3 +29,41 @@
29
29
 
30
30
 
31
31
  というループにして、`i`が素数か調べて、素数なら表示して処理を終了すればいいのでは?
32
+
33
+
34
+
35
+ 追記: エラストネスの篩を使った実装例を示しておきます。
36
+
37
+
38
+
39
+ ```c
40
+
41
+ #include <stdio.h>
42
+
43
+
44
+
45
+ int main(void) {
46
+
47
+ int n;
48
+
49
+ scanf("%d", &n);
50
+
51
+ printf("入力値:%d\n", n);
52
+
53
+
54
+
55
+ int primes[n + 1];
56
+
57
+ for (int i = 0; i <= n; i++) primes[i] = (i > 3 && i % 2 == 0) ? 0 : i;
58
+
59
+ for (int i = 2; i*i <= n; i++) if (primes[i] != 0) for (int x = i + i; x <= n; x += i) primes[x] = 0;
60
+
61
+ while (n > 0 && primes[n] == 0) n--;
62
+
63
+ printf("%d", n);
64
+
65
+ return 0;
66
+
67
+ }
68
+
69
+ ```