回答編集履歴
3
前のコードは i = 3 の時の処理に問題があった。しかし検査対象が奇数しかないのに2で割るという試行を避けたかったので3の取り扱いを変えた。
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 =
|
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 =
|
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
無駄な部分を修正した
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 =
|
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
インデントの乱れを修正した
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
primes[0] = 2;
|
13
13
|
printf("%d\n", primes[0]);
|
14
14
|
|
15
|
-
|
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
|
-
|
31
|
+
return 0;
|
32
32
|
}
|
33
33
|
```
|