回答編集履歴

3

前のコードは i = 3 の時の処理に問題があった。しかし検査対象が奇数しかないのに2で割るという試行を避けたかったので3の取り扱いを変えた。

2023/11/09 12:48

投稿

bboydaisuke
bboydaisuke

スコア5339

test CHANGED
@@ -8,11 +8,13 @@
8
8
 
9
9
  int main(void) {
10
10
  int primes[MAX_PRIME] = {0};
11
- int i, j, cnt = 1, isprime;
11
+ int i, j, cnt = 2, isprime;
12
12
  primes[0] = 2;
13
+ primes[1] = 3;
13
14
  printf("%d\n", primes[0]);
15
+ printf("%d\n", primes[1]);
14
16
 
15
- for (i = 3; i <= MAX_PRIME; i += 2) {
17
+ for (i = 5; i <= MAX_PRIME; i += 2) {
16
18
  isprime = -1;
17
19
 
18
20
  for (j = 1; j < cnt && primes[j] * primes[j] <= i; j++) {

2

無駄な部分を修正した

2023/11/09 12:34

投稿

bboydaisuke
bboydaisuke

スコア5339

test CHANGED
@@ -15,7 +15,7 @@
15
15
  for (i = 3; i <= MAX_PRIME; i += 2) {
16
16
  isprime = -1;
17
17
 
18
- for (j = 0; primes[j] > 0 && primes[j] * primes[j] <= i; j++) {
18
+ for (j = 1; j < cnt && primes[j] * primes[j] <= i; j++) {
19
19
  if (i % primes[j] == 0) {
20
20
  isprime = 0;
21
21
  break;

1

インデントの乱れを修正した

2023/11/09 12:28

投稿

bboydaisuke
bboydaisuke

スコア5339

test CHANGED
@@ -12,7 +12,7 @@
12
12
  primes[0] = 2;
13
13
  printf("%d\n", primes[0]);
14
14
 
15
- for (i = 3; i <= MAX_PRIME; i += 2) {
15
+ for (i = 3; i <= MAX_PRIME; i += 2) {
16
16
  isprime = -1;
17
17
 
18
18
  for (j = 0; primes[j] > 0 && primes[j] * primes[j] <= i; j++) {
@@ -26,8 +26,8 @@
26
26
  printf("%d\n", i);
27
27
  primes[cnt++] = i;
28
28
  }
29
- }
29
+ }
30
30
 
31
- return 0;
31
+ return 0;
32
32
  }
33
33
  ```