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์ง์ ๋ณํ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅ
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
์๋ผํ ์คํ
๋ค์ค์ ์ฒด
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