์ƒˆ์†Œ์‹

๐Ÿงฎ PS

์•Œ๊ณ ๋ฆฌ์ฆ˜ (1) - ์ˆ˜ํ•™ : ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• , ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด (๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ, ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜, ์†Œ์ˆ˜)

  • -

์ˆ˜ํ•™๊ณผ ๊ด€๋ จํ•œ ๊ธฐ์ดˆ๋ฌธ์ œ์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค. 

  1. ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ
  2. ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜
  3. ์†Œ์ˆ˜ (prime number)

 

 

1. ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ (Modular Arithmetic)

 

Python ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค๋ฉด ์ƒ๊ด€์—†๊ฒ ์ง€๋งŒ, C++ , Java์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜์˜ ๊ธธ์ด๊ฐ€ ์ œํ•œ๋˜์–ด์žˆ๋‹ค.

๊ฐ€์žฅ ๊ธด ์ •์ˆ˜ ํ‘œํ˜„๋ฐฉ๋ฒ•์ธ longlong์œผ๋กœ ํ–ˆ์„๋•Œ 8byte์ด๋ฏ€๋กœ.... 

๋”ฐ๋ผ์„œ ๋ฌธ์ œ์—์„œ๋Š” ์ด๋ฅผ n์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋ผ ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ถœ์ œํ•˜๊ฒŒ ๋œ๋‹ค. ํ”ํžˆ %๋ฅผ ์‚ฌ์šฉํ•˜๋Š” modular.

 

* ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ํ’€๋•Œ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ๊ณต์‹ 

  • ๋ง์…ˆ : (A+B)%C  = (A%C + B%C)%C
  • ๊ณฑ์…ˆ : (A*B)%C  = (A%C * B%C)%C
  • ๋บ„์…ˆ : (A-B)%C  = ((A%C)-(B%C)+C)%C

๋บ„์…ˆ์˜ ๊ฒฝ์šฐ ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹์ด ๋‹ค๋ฅด๋‹ค.

๋‚˜๋ˆ—์…ˆ์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

 


2. ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ (GCD : Greates Common Divisor)

 

์ •๋‹ต์˜ ์ถœ๋ ฅ์ด ๋ถ„์ˆ˜์ผ๋•Œ, ๊ธฐ์•ฝ๋ถ„์ˆ˜์˜ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•˜๋ผ. ๋ผ๋Š” ๊ฒฝ์šฐ์— ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(GCD)์˜ ์‚ฌ์šฉ์ด ํ•„์š”ํ•˜๋‹ค.

  • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ : A,B ์˜ ๊ณตํ†ต๋œ ์•ฝ์ˆ˜์ค‘, ๊ฐ€์žฅ ํฐ ์•ฝ์ˆ˜.
  • ์ด๋•Œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๊ฐ€ 1์ด๋ผ๋ฉด A,B๋Š” ์„œ๋กœ์†Œ(coprime)๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

* ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• 1 - ๋ฐ˜๋ณต๋ฌธ

 

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ• : min(a,b) ~ 2๊นŒ์ง€์˜ ๋ชจ๋“  ์ •์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ™•์ธํ•œ๋‹ค.(๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด)

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด ๋œ๋‹ค.

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ - Python
GCD = 1  # ์–ด์ฐจํ”ผ ๊ณต์•ฝ์ˆ˜์— 1์€ ๋ฌด์กฐ๊ฑด ๋“ค์–ด๊ฐ€๋ฏ€๋กœ...
a = int(input()); b = int(input())
i = 2 
while(i<=min(a,b)):
    if a%i == 0 and b%i ==0 :
        GCD = i
    i+=1
print(GCD)
์ตœ๋Œ€๊ณต์•ฝ์ˆ˜
int g= 1;
for (int i=2; i<=min(a,b); i++){
    if (a%i ==0 && b%i ==0){
        g=i;
    }
}

 

* ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• 2 -  ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• (Euclidean algorithm)

 

์œ„์—์„œ ์†Œ๊ฐœํ•œ ๋ฐฉ๋ฒ• 1๋ณด๋‹ค ๋น ๋ฅด๋‹ค.

  • ์›๋ฆฌ : a,b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” b์™€ a%b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค
  • ์ฆ‰, GCD(a,b) = GCD(b,a%b)
  • ์ด๋•Œ a%b๋ฅผ r๋กœ ํ‘œํ˜„ํ–ˆ์„ ๋•Œ, r์ด 0์ด๋ฉด ๊ทธ๋•Œ b๊ฐ€ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๊ฐ„๋‹ค.

24์™€ 16์œผ๋กœ ์˜ˆ๋ฅผ๋“ค์–ด๋ณด๋ฉด GCD(24,16) = GCD(16,8) = GCD(8,0)

๋งˆ์ง€๋ง‰์— r์ด 0์ด ๋˜์—ˆ์œผ๋ฏ€๋กœ, 24์™€ 16์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 8์ด๋‹ค.

 

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• ๊ตฌํ˜„ 1 - ์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉ
int gcd(int a , int b){
    if (b==0){
        return a;
    }
    else {
        return gcd(b, a%b);
    }
}

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log n)์ด ๋œ๋‹ค.

 

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• ๊ตฌํ˜„ 2 - ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ
int gcd(int a , int b){
    while(b!=0){
        int r = a%b;
        a = b;
        b = r;
    }
    return a;
}

๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ–ˆ์„๋•Œ๋„ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log n)์ด ๋œ๋‹ค.

 

์„ธ๊ฐœ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ - Python
#24, 16, 48์˜ ์ตœ์†Œ๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์ž.
def gcd(a, b) :
    if b==0:
        return a
    else :
        return gcd(b,a%b)

print(gcd(48,gcd(24,16)))


๊ทธ๋ƒฅ ๋˜‘๊ฐ™์ด ๊ตฌํ˜„ํ•ด์ค€๋’ค์—, GCD(a, ( GCD(b,c) ) ์™€ ๊ฐ™์ด ๊ฒน์ณ์„œ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ˆ˜๊ฐ€ 4๊ฐœ 5๊ฐœ๋ผ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

 

 

2. ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ (LCM : Least Common Multiple)

 

 

์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ์ค„์—ฌ์„œ LCM์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ธ GCD๋ฅผ ์‘์šฉํ•˜์—ฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ดํ•ด ํ–ˆ๋‹ค๋ฉด, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ์•„๋ž˜ ๊ณต์‹๋งŒ ์•Œ๋ฉด ํฌ๊ฒŒ ์–ด๋ ค์šธ๋‚ด์šฉ์ด ์—†๋‹ค.

 

a,b์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ = ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ * a/์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ * b/์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

  • LCM(a,b) = GCD*(a / GCD) * (b / GCD)

 

 

 

 


3.  ์†Œ์ˆ˜ (Prime Number)

  • ์†Œ์ˆ˜ : ์•ฝ์ˆ˜๊ฐ€ 1๊ณผ ์ž๊ธฐ ์ž์‹ ๋ฐ–์— ์—†๋Š” ์ˆ˜
  • N์ด๋ผ๋Š” ์ˆ˜๊ฐ€ ์†Œ์ˆ˜๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด : 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , N-1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด ์•ˆ๋œ๋‹ค.

 

 

 

* ์†Œ์ˆ˜์™€ ๊ด€๋ จ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2๊ฐ€์ง€ 

  • ์ฒซ๋ฒˆ์งธ :  ์–ด๋–ค ์ˆ˜ N์ด ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋‘๋ฒˆ์งธ : N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ชจ๋“  ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•

 

 

 

*์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• 1- ์กฐ๊ฑด์„ N/2 ๋กœ

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ด๊ธฐ์œ„ํ•ด์„œ ์†Œ์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ๋ณด๋ฉด

  • ์†Œ์ˆ˜ : 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , N/2๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด ์•ˆ๋œ๋‹ค.
  • N/2 ์ธ ์ด์œ  : N์˜ ์•ฝ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฒƒ์€ N/2๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. )
  • ์ค‘์š”ํฌ์ธํŠธ : ์†Œ์ˆ˜๊ฐ€ ๋˜๊ธฐ์œ„ํ•œ ์กฐ๊ฑด์ด N-1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ด ์•„๋‹ˆ๋ผ, N/2๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€์œผ๋กœ ํ•˜์—ฌ์•ผ ์ฝ”๋“œ๊ตฌํ˜„์‹œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

n์ด ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ 
bool prime(int n){
    if (n < 2){
        return False;
    }
    for (int i=2; i<=n/2; i++){
        if (n % i ==0){
            return False;
        }
    }
    return True;
}

์‹œ๊ฐ„๋ณต์žก๋„ : O(n)

 

 

*์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• 2 - ์กฐ๊ฑด์„ ๋ฃจํŠธN ์œผ๋กœ

 

 

  • ์†Œ์ˆ˜ : 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , ๋ฃจํŠธ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด ์•ˆ๋œ๋‹ค.
  • ๋ฃจํŠธ N์ธ ์ด์œ  : N์ด ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด N = a*b ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. (a<=b)
  • ๋‘ ์ˆ˜ a,b์˜ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ๋Š” ๋ฃจํŠธ N์ผ ๊ฒฝ์šฐ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฃจํŠธ N๊นŒ์ง€๋งŒ ๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ณด๋ฉด ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

n์ด ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„
bool prime(int n){
    if (n < 2){
        return False;
    }
    for (int i=2; i*i<=n; i++){
        if (n % i ==0){
            return False;
        }
    }
    return True;
}

์ด ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์‹œ๊ฐ„๋ณต์žก๋„ ํšจ์œจ์ด ์ข‹๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(๋ฃจํŠธN)

 

 

*์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• 3 - ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

 

* 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ฒ”์œ„์˜ ๋ชจ๋“  ์†Œ์ˆ˜๋ฅผ ๊ตฌํ• ๋•Œ ์‚ฌ์šฉํ• ๋•Œ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • (1) 2๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ชจ๋“  ์ˆ˜๋ฅผ ์จ๋†“๋Š”๋‹ค.
  • (2) ์•„์ง ์ง€์›Œ์ง€์ง€ ์•Š์€ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.
  • (3) ๊ทธ ์ˆ˜๋Š” ์†Œ์ˆ˜์ด๋‹ค.
  • (4) ์ด์ œ ๊ทธ ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์šด๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด 2๋ถ€ํ„ฐ 100๊นŒ์ง€๋กœ ๋ฒ”์œ„๋ฅผ ์žก๊ณ  ๊ตฌํ˜„ํ•ด๋ณด๋ฉด,

์—ฌ๊ธฐ์„œ ์ œ์ผ ์ž‘์€ ์ˆ˜๋Š” 2์ด๊ณ , 2๋Š” ์†Œ์ˆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ 2์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์šด๋‹ค.

์—ฌ๊ธฐ์„œ ์ง€์›Œ์ง€์ง€ ์•Š์•˜์œผ๋ฉฐ, ์ œ์ผ ์ž‘์€ ์ˆ˜๋Š” 3์ด๋‹ค. 3์€ ์†Œ์ˆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ 3์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์šด๋‹ค.

๋‹ค์Œ์€ 5์ด๋ฉฐ, 5๋„ ์†Œ์ˆ˜์ด๋ฏ€๋กœ 5์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์šด๋‹ค.

๋‹ค์Œ์€ 7์ด๋ฉฐ, 7์€ ์†Œ์ˆ˜์ด๋‹ค. 7์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์šด๋‹ค.

๋‹ค์Œ์€ 11์˜ ๋ฐฐ์ˆ˜์ด์ง€๋งŒ 11์˜ ๋ฐฐ์ˆ˜๋“ค์€ ์ด๋ฏธ ์ง€์›Œ์กŒ๋‹ค. (11์˜ ์ œ๊ณฑ์€ 121์ธ๋ฐ, 100์„ ๋„˜์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋”์ด์ƒ ์ˆ˜ํ–‰ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š”๊ฒƒ์ด๋‹ค.) 

์—ฌ๊ธฐ๊นŒ์ง€ ํ–ˆ๋‹ค๋ฉด ์†Œ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ตฌํ–ˆ๋‹ค.

 

 

* ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ• ๋•Œ๋Š” ์ง€์šฐ๋Š” ๊ณผ์ •์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐฐ์—ด์„ ๊ณ„์†ํ•˜์—ฌ ์ˆ˜์ •ํ•˜๊ฒŒ๋˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ƒ๋‹นํžˆ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

 ๋”ฐ๋ผ์„œ, ์ง€์›Œ์กŒ๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ ๋œ๋‹ค.

 

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด -  ์ฝ”๋“œ๊ตฌํ˜„
int prime[100]; //1~100 ์ €์žฅ
int pn=0; //์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜ ์นด์šดํŒ…
bool check[101]; //์ง€์›Œ์กŒ์œผ๋ฉด true
int n = 100; //100๊นŒ์ง€ ์†Œ์ˆ˜
for (int i = 2; i<=n; i++){
    if (check[i] == false){ //์ง€์›Œ์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด
        prime[pn++] = i;  // ์†Œ์ˆ˜ ์นด์šดํŒ… ++
        for (int j = i*i ; j<=n; j+=i){ //๋ฌธ์ œ์—์„œ i์˜ ์ˆ˜๊ฐ€ ํด๊ฒฝ์šฐ, i*i๋ฅผ  i*2 ์ •๋„๋กœ ๋ฐ”๊พธ๋Š”๊ฒŒ ์ข‹๋‹ค.
            check[j] = true;
        }
    }
}

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” ๋งค์šฐ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ, ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(nloglogn)์ด๋‹ค.

 

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ, ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ  - (Python) ํŒŒ์ด์ฌ ์‚ฌ์šฉ
r = int(input()) #์ž…๋ ฅํ•˜๋Š” ๋งŒํผ ๋ฒ”์œ„
check = [False for _ in range(r)]

for i in range(2,int(r**0.5)) : # 2๋ถ€ํ„ฐ ~ ๋ฒ”์œ„(r)์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€
    if check[i] == False : # ์ง€์›Œ์ง€์ง€ ์•Š๊ณ , ๊ฐ€์žฅ ์ž‘์€์ˆ˜๋ผ๋ฉด
        for j in range(i*2 , r, i ): # i์˜ 2๋ฐฐ์ˆ˜ ๋ถ€ํ„ฐ, 3๋ฐฐ์ˆ˜, 4๋ฐฐ์ˆ˜, .... ๋ฒ”์œ„๋๊นŒ์ง€ ์ง€์šด๋‹ค.(True๋กœ)
            check[j] = True

prime_number = [i for i,j in enumerate(check) if i>=2 and j==False]

print(prime_number)
   *range์˜ 3๋ฒˆ์งธ parameter๋Š” ์ ํ”„ํ•  ์ˆซ์ž์ด๋‹ค. ์ฆ‰, i์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์›Œ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 3๋ฒˆ์งธ ์ธ์ž์— i๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

 


 

*๊ด€๋ จ๋ฌธ์ œ 

https://www.acmicpc.net/problem/10430

 

10430๋ฒˆ: ๋‚˜๋จธ์ง€

์ฒซ์งธ ์ค„์— A, B, C๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (2 ≤ A, B, C ≤ 10000)

www.acmicpc.net

 

https://infinitt.tistory.com/231

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 1934 : ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/1934 1934๋ฒˆ: ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๋‘ ์ž์—ฐ์ˆ˜ A์™€ B์— ๋Œ€ํ•ด์„œ, A์˜ ๋ฐฐ์ˆ˜์ด๋ฉด์„œ B์˜ ๋ฐฐ์ˆ˜์ธ ์ž์—ฐ์ˆ˜๋ฅผ A์™€ B์˜ ๊ณต๋ฐฐ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฐ ๊ณต๋ฐฐ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜..

infinitt.tistory.com

https://infinitt.tistory.com/233

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/2609 2609๋ฒˆ: ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์ฒซ์งธ ์ค„์—๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ, ๋‘˜์งธ ์ค„์—๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ์ˆ˜์˜ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. www.acm..

infinitt.tistory.com

 

https://infinitt.tistory.com/234

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 9613๋ฒˆ : GCD ํ•ฉ

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/9613 9613๋ฒˆ: GCD ํ•ฉ ๋ฌธ์ œ ์–‘์˜ ์ •์ˆ˜ n๊ฐœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์Œ์˜ GCD์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ t (1 &..

infinitt.tistory.com

 

https://infinitt.tistory.com/235

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 1978 : ์†Œ์ˆ˜ ์ฐพ๊ธฐ

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/1978 1978๋ฒˆ: ์†Œ์ˆ˜ ์ฐพ๊ธฐ ์ฒซ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 100์ดํ•˜์ด๋‹ค. ๋‹ค์Œ์œผ๋กœ N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ ์ˆ˜๋Š” 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. www.acmicpc.net ์†Œ์ˆ˜..

infinitt.tistory.com

https://infinitt.tistory.com/236

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 1929 : ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/1929 1929๋ฒˆ: ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ ์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ M๊ณผ N์ด ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. (1 ≤ M ≤ N ≤ 1,000,000) M์ด์ƒ N์ดํ•˜์˜ ์†Œ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ์ž…๋ ฅ..

infinitt.tistory.com

 

https://infinitt.tistory.com/237

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 2960๋ฒˆ : ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/2960 2960๋ฒˆ: ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ๋ฌธ์ œ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ชจ๋“  ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ์œ ๋ช…ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 2๋ถ€ํ„ฐ N๊นŒ์ง€..

infinitt.tistory.com

https://infinitt.tistory.com/238

 

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 6588๋ฒˆ : ๊ณจ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/6588 ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค...

infinitt.tistory.com

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.