๋ฃจํธ n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์๋ก ๋๋์ด ๋จ์ด์ง๋ฉด ์์๊ฐ ์๋!
bool prime(int n)
{
if (n < 2)
return false;
// i <= ๋ฃจํธ n์ ๋ชปํ๋ฏ๋ก.
// i * i < n
for (int i = 2; i * i <= n; ++i)
{
if (n % i == 0)
return false;
}
return true;
}
: ์ฝ์๊ฐ 1๊ณผ ์๊ธฐ์์ ๋ฐ์ ์๋ ์ , (1์ ์ ์ธํ๊ณ )
2 , 3 , 5 , 7 , 11 ,,,
4 , 6 , 8 , 9 ๋ ์ฝ์๊ฐ ์๊ธฐ ์์ ๋ง๊ณ ๋ ๋ง์.
for(int i = 2; i < n; ++i)
{
if(n % i == 0)
{
//์์ ์๋.
}
}
-> ์๊ฐ ๋ณต์ก๋ : o(n)
: ์ ์ด๋ฌํ ์๊ฐ์ ํ๋ฐ๋ฉด, ์ซ์๋ฅผ ๋ฐ์ ๋ก ๋๋์์ ๋ ๊ทธ ๊ฐ๊น์ง๋ง ์งํํ๋ฉด
์ง๊ฟ์ ๊ฐ์ด ๋์ค๊ธฐ ๋๋ฌธ.
๋ฐ์ ์ด์์ด ๊ฐ์ผ๋ก ๋๋๋ฉด ์ด์ ์ ์งํํ ๋๋ฒ๋ ๋ฐ๋์ ๋์ด.
n์ด 27์ด๋ผ๊ณ ํ ๋
27์ด ์์์ธ์ง ์๋์ง๋ฅผ ํ์ธํ ๋(์ผ๋จ ์์ธ์๋ 1 3 9 27 ) ์ด๊ณ
1 ์ด๋ 3๊น์ง๋ง ์งํํ๋ฉด ์ง ๊ฟ์ธ 9์ 27์ ๊ดํด์ ์์ธ์์ธ์ง๋ฅผ ์ ํ ์งํํ ํ์๊ฐ ์์.
n์ด 23์ด๋ผ๊ณ ํ๋ฉด (์ผ๋จ ์์ธ์๋ 1 23์ด๋ค. -> ๋ฐ๋ผ์ ์์์.)
: ์์์ ๋ด๊ฐ ์๊ฐํ๋๋ก ์งํํ๋ฉด 11๊น์ง๋ง ์งํํ๋ฉด ์ ์ ์์.
n ์ด 14๋ผ๊ณ ํ๋ฉด (์ผ๋จ ์์ ์๋.)
7๊น์ง๋ง ์งํํ๋๋ผ๋ ๋๋์ด์ง๋๊น ์์๊ฐ ์๋.
for(int i = 2; i * 2 <= n; ++i)
{
if(n % i == 0)
-> ์์
}
์ ์ด๋ฐ์๊ฐ์ ํ๋๋ฉด, ์ด๋ ํ ์์ ๊ดํด์ ์ ๊ณฑ๊ทผ์ด๋
์ ๊ณฑ๊ทผ๋ผ๋ฆฌ ๊ณฑํ์ ๋ ์๋ ์๋ฅผ ๊ตฌํ ์ ์๋ค๋ ๊ฒ์.
-> ์ ๊ณฑ๊ทผ ๋ณด๋ค ํฐ๊ฐ์ ๋ฐ๋์ ์ ๊ณฑ๊ทผ๋ณด๋ค ์์ ๊ฐ๊ณผ ๊ณฑํด์ผ๋ง
์๋ ์๋ฅผ ๋ง๋ค์ ์์. ์๋๋ฉด ๋ง๋ค์ง๋ ๋ชปํจ.
์ฆ, ์ ๊ณฑ๊ทผ์ ๊ธฐ์ค์ผ๋ก ํด์ ๋์นญ์ ์ด๋ฃจ๊ณ ์์์ ์์งํด์ผ ํจ.
16์ ๊ฐ์ง๊ณ ์๊ฐํด๋ณด๋ฉด,
1 2 4 8 16 ์ด๊ณ ์ฌ๊ธฐ์์ ์ ๊ณฑ๊ทผ์ธ 4๊น์ง๋ง ์ฒ๋ฆฌํ๋ฉด ๋๋ค๋ ๊ฒ์.
๊ทธ๋ผ 8์ ์ด๋ฏธ 2์์ ๊ณ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์์์ ๋ฌด ์งํํ ํ์๊ฐ ์์.
-> ์์ ์๋ฅผ ํตํด ๋์นญ์ ๋ง๋๋ ์ ๊ณฑ๊ทผ์ ํตํด ์์ ์ ๋ฌด ํ๋ณ์ด ๊ฐ๋ฅํจ.
if(n < 2) false;
for(int i = 2; i * i <= n; ++i)
{
if( n % i == 2)
{
//์์ ์๋.
}
}