Algorithm-math.md


  • ์ง„์ˆ˜, ์ง„๋ฒ•

  • ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜, ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

์ง„์ˆ˜์™€ ์ง„๋ฒ•


  • N ์ง„๋ฒ•์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ณ€ํ™˜ํ•˜๊ธฐ

def stoi(s, n):
    ret = 0
    l = len(s)
    for i in range(l): ret += int(s[i]) * n**(l-i-1)
    return ret

=> ํ™œ์šฉ

  • ๊ฑฐ๋“ญ์ œ๊ณฑ ์—ฐ์‚ฐ baekjoon1629๋ฒˆ

  • ์กฐ๊ฑด๋ฌธ + N์ง„์ˆ˜ ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ doublemulimage

def pow_custom(a, b):
    ret = 1
    while b:
        if b % 2 == 1: ret *= a
        a = a*a
        b //= 2
    return ret
  • ํฐ ์ˆ˜๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒƒ์€ Python์—์„œ๋„ ๋А๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์ž๋ฅผ ์ค‘๊ฐ„์ค‘๊ฐ„์— ์“ฐ์ž!

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜


  • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(GCD) : ๊ณต์•ฝ์ˆ˜ ์ค‘ ์ตœ๋Œ“๊ฐ’

    • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๊ฐ€ 1์ด๋ฉด ์„œ๋กœ์†Œ

  • ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(LCM) : ๊ณต๋ฐฐ์ˆ˜ ์ค‘ ์ตœ์†Œ๊ฐ’

LCM(A, B) = A * B / GCD(A, B)

=> GCD๋งŒ ์ž˜ ๊ตฌํ•˜๋ฉด LCM์€ O(1)์— ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

# ์ •๋ฐฉํ–ฅ ์ฒดํฌ
def gcd(a, b):
    ret = 0
    for i in range(min(a, b)):
        if a % i == 0 and b % i == 0:
            ret = i
    return ret

# ์—ญ๋ฐฉํ–ฅ ์ฒดํฌ => ๋” ๋น ๋ฆ„
def gcd(a, b):
    for i in range(min(a, b), 0, -1):
        if a % i == 0 and b % i == 0:
            return i
  • โœ… ๐Ÿ˜€์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•

    • ์œ„์˜ ๋‘ ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค

GCD(A, B) = GCD(B, A % B)

# ์†๋„ => O(log N)
def gcd(a, b):
    return b if a % b == 0 else gcd(b, a%b)

์†Œ์ˆ˜์™€ ์†Œ์ธ์ˆ˜๋ถ„ํ•ด


  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์†Œ์ˆ˜ ํŒ๋ณ„๋ฒ•

# 2๋ถ€ํ„ฐ N-1๊นŒ์ง€ ์ฒดํฌ
def isPrime(N):
    for i in range(2, N):
        if N % i == 0: return False
    return True
# 2๋ถ€ํ„ฐ sqrt(N)๊นŒ์ง€ ์ฒดํฌ 
def isPrime(N):
    i = 2
    while i*i <= N:
        if N % i == 0: return False
    return True

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

eratostenes

def era(N):
    ck, p = [False for _ in range(N+1)], []
    for i in range(2, N+1):
        if ck[i] == True: continue
        p.append(i)
        for j in range(i*i, N+1, i):
            ck[j] = True
    return ck, p

Last updated