๐Ÿ˜†์†Œ์ˆ˜ ๋ฃจํŠธn์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

์šฅยท2022๋…„ 9์›” 15์ผ
0

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ•

๋ชฉ๋ก ๋ณด๊ธฐ
61/86

๊ทธ๋ƒฅ ์™ธ์šฐ๋Š” ๊ฒŒ ์•„๋‹˜. : ์ตœ๊ทผ ์ถ”๊ฐ€ 240210

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ logN

    ๋ฃจํŠธ 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 ๋Š” ์•ฝ์ˆ˜๊ฐ€ ์ž๊ธฐ ์ž์‹ ๋ง๊ณ ๋„ ๋งŽ์Œ.

์ฝ”๋“œ๋กœ ๊ตฌํ˜„

1. ๊ฐ„๋‹จํžˆ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„

for(int i = 2; i < n; ++i)
{
if(n % i == 0)
{
//์†Œ์ˆ˜ ์•„๋‹˜.
}
}
-> ์‹œ๊ฐ„ ๋ณต์žก๋„ : o(n)

2. n / 2 ๊นŒ์ง€๋งŒ ์ง„ํ–‰ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ???

: ์™œ ์ด๋Ÿฌํ•œ ์ƒ๊ฐ์„ ํ–ˆ๋”ฐ๋ฉด, ์ˆซ์ž๋ฅผ ๋ฐ˜์ ˆ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ๊ทธ ๊ฐ’๊นŒ์ง€๋งŒ ์ง„ํ–‰ํ•˜๋ฉด
์ง๊ฟ์˜ ๊ฐ’์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ.
๋ฐ˜์ ˆ์ด์ƒ์ด ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ์ด์ „์— ์ง„ํ–‰ํ•œ ๋„˜๋ฒ„๋Š” ๋ฐ˜๋“œ์‹œ ๋‚˜์˜ด.

  • 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) 
    -> ์†Œ์ˆ˜
    
}
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : o(n /2 )

3. ๋ฃจํŠธ n์„ ์ƒ๊ฐํ•˜์ž.

์™œ ์ด๋Ÿฐ์ƒ๊ฐ์„ ํ–ˆ๋ƒ๋ฉด, ์–ด๋– ํ•œ ์ˆ˜์— ๊ด€ํ•ด์„œ ์ œ๊ณฑ๊ทผ์ด๋ž€
์ œ๊ณฑ๊ทผ๋ผ๋ฆฌ ๊ณฑํ–ˆ์„ ๋•Œ ์›๋ž˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž„.
-> ์ œ๊ณฑ๊ทผ ๋ณด๋‹ค ํฐ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ์ œ๊ณฑ๊ทผ๋ณด๋‹ค ์ž‘์€ ๊ฐ’๊ณผ ๊ณฑํ•ด์•ผ๋งŒ
์›๋ž˜ ์ˆ˜๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ์Œ. ์•„๋‹ˆ๋ฉด ๋งŒ๋“ค์ง€๋„ ๋ชปํ•จ.
์ฆ‰, ์ œ๊ณฑ๊ทผ์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ๋Œ€์นญ์„ ์ด๋ฃจ๊ณ  ์žˆ์Œ์„ ์ˆ™์ง€ํ•ด์•ผ ํ•จ.

  • 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) 
    {
    //์†Œ์ˆ˜ ์•„๋‹˜.
    }
    
}
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ O(longN)

3. ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฑ„ ์‚ฌ์šฉํ•˜๊ธฐ

profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€