์ฝ๊ฒ ํ์ด์ด C์ธ์ด Express 7์ฅ 7๋ฒ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์.
2์ 100์ฌ์ด์ ์๋ ๋ชจ๋ ์์(prime number)๋ฅผ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ์ ์๊ฐ ์์๊ฐ ๋๋ ค๋ฉด 1๊ณผ ์๊ธฐ ์์ ๋ง์ ์ฝ์๋ก ๊ฐ์ ธ์ผ ํ๋ค.
HINT : ์์์ ์ฝ์๋ 1๊ณผ ์๊ธฐ์์ ๋ฟ์ด๋ค. ๋ฐ๋ผ์ 1๋ถํฐ ์๊ธฐ ์์ ์ฌ์ด์ ์ฝ์๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด ์์๊ฐ ์๋๋ค.
ํ์ด
์ด์ ์ boolean์ ๊ฐ๋ ์ ๋ํด ๋ฐฐ์ ์๋๋ผ๋ฉด true์ false๋ฅผ ์ด์ฉํด๋ ๋์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ boolean์ ๋ํด ์์ง ๋ฐฐ์ฐ์ง ์์ stdbool.h ํค๋ํ์ผ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ์์์ธ์ง ์๋์ง๋ฅผ ๊ตฌ๋ถํ๋ ๊ฒ์ 1๊ณผ 0์ผ๋ก ํ์.
while(1)์์๋ 1์ ์์ฑํ๋ฉด ๋ฌดํ๋ฃจํ๋ฅผ ๋๋ฏ์ด, ๋ณดํต 1์ด true๋ฅผ ๋ปํ๊ณ 0์ด false๋ฅผ ๋ปํ๋ค.
i๋ก 2๋ถํฐ 1์ฉ ์ฆ๊ฐํ๋ฉด์ ์ซ์ ํ๋์ฉ ๋ชจ๋ ์์์ธ์ง ์๋์ง๋ฅผ ํ๋จํ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์์๋ฅผ ํ๋จํ๋ ค๋ฉด ๊ทธ ์ซ์ i๊ฐ ์๊ธฐ์์ ๋ณด๋ค ์์ ์ซ์๋ค๋ก ๋๋์ด ๋จ์ด์ง๋ฉด(๋๋จธ์ง๊ฐ 0์ด๋ฉด) ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฐ๋ณต๋ฌธ์ ํ๋ ๋ ๋ง๋ค์ด j๊ฐ 2๋ถํฐ i๊น์ง ๋๋จธ์ง์ฐ์ฐ์ %๋ฅผ ์ํํ๋๋ก ํด์ค์ผ ํ ๊ฒ์ด๋ค. ๋๋จธ์ง์ฐ์ฐ์๋ฅผ ์ํํ ๊ฐ์ด 0์ด๋ฉด ๋๋์ด๋จ์ด์ก๋ค๋ ๋ป์ผ๋ก ์์๊ฐ ์๋๋ฏ๋ก, ์์๊ฐ ์๋๋ผ๋ ์๋ฏธ์ isPrime=0์ ์ฃผ๊ณ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ์.
๋ฐ๋ณต๋ฌธ์ ํ์ถํ๋ฉด isPrime์ด 1์ธ์ง 0์ธ์ง๋ฅผ ํ๋จํ์ฌ ์ถ๋ ฅํ ์ง๋ง์ง ์ ํ์.
์ฝ๋
#include <stdio.h>
int main(void) {
int i, j, isPrime;
for (i = 2; i <= 100; i++) {
//๊ธฐ๋ณธ์ ์ผ๋ก ์์๋ผ๊ณ ๊ฐ์ . ์์๊ฐ ์๋ ๋๋ง 0์ผ๋ก ๋ฐ๊พธ์ด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ
isPrime = 1;
for (j = 2; j < i; j++) {
if (i % j == 0) {
isPrime = 0; //์์๊ฐ ์๋ ๊ฒฝ์ฐ
break;
}
}
if (isPrime == 1) { //์์์ผ ๊ฒฝ์ฐ์๋ง ์ถ๋ ฅํ๋ค.
printf("%d ", i);
}
}
return 0;
}
์คํ๊ฒฐ๊ณผ
์ถ๊ฐ ํ์ด
์ฌ์ค ์์์ธ์ง๋ฅผ ํ๋จํ๋ j ๋ฐ๋ณต๋ฌธ์ ์๊ธฐ์์ ์ธ i๊น์ง ๋๋ ค์ค ํ์๋ ์๋ค.
์๋ฅผ ๋ค์ด, ์ซ์ 15๊ฐ ์์์ธ์ง๋ฅผ ํ๋จํ๋ค๊ณ ํ ๋, j=2 ๋ถํฐ ๋ฐ๋ณต๋ฌธ์ ์์ํ ๊ฒ์ด๋ค.
15์ ์ฝ์๋ 1,3,5,15 ์ธ๋ฐ, 15์ ์ ๋ฐ์ธ ์ฝ 7~8 ์ดํ๋ก๋ง ์์๋ฅผ ํ๋จํด๋ ๋๋ ๊ฒ์ด๋ค.
์์ ๊ฐ์ด 15์ ์ ๋ฐ์ ๊ธฐ์ค์ผ๋ก 7 ์ดํ์ ๋๋์ด ๋จ์ด์ง๋ ์ฝ์๊ฐ ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด ์์๊ฐ ์๋ ๊ฒ์ผ๋ก ํ๋จํ ์ ์๋ค๋ ๋ป์ด๋ค. ๋์์, ์ ๋ฐ์ธ 7 ์ดํ์ ๋๋์ด ๋จ์ด์ง๋ ์ฝ์๊ฐ ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด ์์์ธ ๊ฒ์ผ๋ก ํ๋จํ๋ค๋ ๊ฒ์ด๋ค.
15์ ๊ฐ์ด ์์๊ฐ ์๋ ์ซ์๋ for ๋ฌธ์ ์ฑ ๋ค ๋๊ธฐ๋ ์ ์ธ j=3์์ break๋ก ํ์ถํด๋ฒ๋ฆด ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ 101๊ณผ ๊ฐ์ด ์์์ธ ์ซ์๋ ์ฝ์๊ฐ ์์ผ๋ฏ๋ก j=100 ๊น์ง 100๋ฒ์ด๋ ๋ฐ๋ณต๋ฌธ์ ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์๋ ์ฝ๋์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก, j์ ๋ฒ์๋ฅผ j<i ๊ฐ ์๋, j <= i/2 ๋ก ์ค์ ํด์ฃผ์.
#include <stdio.h>
int main(void) {
int i, j, isPrime;
for (i = 2; i <= 100; i++) {
isPrime = 1;
for (j = 2; j <= i/2; j++) {
if (i % j == 0) {
isPrime = 0;
break;
}
}
if (isPrime == 1) {
printf("%d ", i);
}
}
return 0;
}
์กฐ๊ธ ๋ ํจ์จ์ด ๋์์ง ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
๋๊ธ