본문 바로가기
728x90
반응형

스터디223

[정수론] 소수와 관련된 알고리즘 (소수 판정, 에라토스테네스의 체, 오일러 피 함수) 소수, 에라토스테네스의 체, 표준분해, 오일러 피 함수소수와 합성수 (primes and composites)소수: $1$과 자기 자신만을 약수로 가지는 수이다. 영어로 prime number라 하기 때문에 보통 $p$로 표기한다.합성수: $1$보다 큰 자연수 중에서 소수가 아닌 수. 약수의 개수가 3개 이상이다.※ $1$은 소수도 아니고 합성수도 아닌 수이다. $1$을 소수로 분류하면 소인수분해가 유일하지 않기 때문인 것으로 보인다.※ 소수(prime number)의 발음은 '소쑤'이고, 소수(decimal notation)의 발음은 '소:수'이다.  $p \le \sqrt{n}$인 모든 소수 $p$에 대하여 $p$의 배수가 되는 합성수들을 모두 제거한 나머지는 모두 소수이다.따라서 $n=46$의 소수.. 2024. 8. 11.
[정수론] 약수, 배수, 최대공약수, 최소공배수와 관련된 알고리즘 공약수와 최대공약수(GCD),  공배수와 최소공배수(LCM), 유클리드의 호제법 (Euclidean Algorithm)나눗셈 정리 (Division Algorithm)임의의 정수 $a, b\ (b \neq 0)$에 대하여 $a = bq + r$, $0 \le r  파이썬 코드에서는 간단히 구할 수 있다.q = a // br = a % b 약수와 배수 (divisor and multiple)두 정수 $a, b \ (b \neq 0)$에 대하여 $b=ac$를 만족하는 정수 $c$가 존재할 때, $b$를 $a$의 배수(multiple)라 하고 $a$를 $b$의 약수(divisor) 또는 인수(factor)라 한다. 이때 "$a$는 $b$를 나눈다" 또는 "$b$는 $a$에 의하여 나누어떨어진다" 라고 하고, .. 2024. 8. 10.
[정수론] 오일러의 정리, 페르마의 소정리, 중국인의 나머지 정리, 윌슨의 정리 정수론 4대 정리: 오일러의 정리, 페르마의 소정리, 중국인의 나머지 정리, 윌슨의 정리  정수론 4대정리에 대해 간단히 정리한다. 자세한 내용이나 증명은 이후 포스팅 할 예정이다.여기서는 정리의 내용과 간단한 활용방법에 대해 알아본다.페르마의 소정리 (Fermat's little theorem)정수 $a$, 소수 $p$에 대하여 다음이 성립한다.\[ a^p \equiv p \pmod{p} \]$a$가 $p$로 나누어지지 않는 경우에(즉 $p \nmid a$, $\gcd(p, a)=1$) 다음이 성립한다.\[ a^{p-1} \equiv 1 \pmod{p} \] 역은 성립하지 않는다. 즉, 소수가 아닌 합성수 $p$인 경우에도 $a^{p-1} \equiv 1 \pmod{p}$인 경우가 존재한다.이런 $p$.. 2024. 8. 6.
최소 공통 조상 (Lowest Common Ancestor, LCA) 최소 공통 조상 (LCA) 알고리즘Problem Setup$N$개의 node로 이루어진 트리가 주어진다. (트리이므로 간선의 개수는 $N-1$개이다)$q$개의 query에 대하여 두 node사이의 거리를 계산한다. 위 그림은 백준 11437 LCA 문제이다. 1번 노드가 루트이다.6번과 11번 노드의 최소 공통 조상은 2번 노드이다. (1번 노드 역시 공통 조상이지만, 최소가 아니다.)10번과 9번 노드의 최소 공통 조상은 4번이다. 즉, LCA(10, 9) = 48번과 15번 노드의 최소 공통 조상은 1번이다. 즉, LCA(8, 15) - 1 루트노드에서 DFS/BFS 알고리즘을 통해 각 노드의 깊이를 계산하여 depth 배열에 저장한다.1의 depth는 0, 2와 3의 depth는 1, 4번~8번 노.. 2024. 7. 11.
[Python] 퍼즐 조각 채우기 퍼즉 조각 채우기문제 출처: 프로그래머스난이도: level 3input size: $n \le 50$ (정사각 격자)(주관) 자료구조: 그래프(주관) 알고리즘: 완전탐색, BFS(주관) 시간복잡도: $O(n^2) = O(V+E)$ ($V=n^2, E=2n(n-1)$) 2개의 정사각 배열이 주어진다. 1은 블록 한 조각을, 0은 빈 공간을 나타낸다.game_board의 빈 공간을 table에 있는 블록을 이용하여 채운다.하나의 공간을 여러 블록으로 채우거나, 작은 블록으로 큰 빈공간을 채우고 나서도 빈 공간이 있으면 안된다.이때 채워지는 블록의 면적을 리턴하면 된다.STEP 1. 서로 같은 블록단순히 면적을 구하는 것은 DFS/BFS를 이용하여 구할 수 있다.그리고 블록은 좌표의 리스트로 나타낼 수 있다... 2024. 7. 3.
[Python] 최고의 집합 최고의 집합문제 출처: 프로그래머스난이도: level 3참고: 없음input size: $1 \le n \le 10^4$, $1 \le s \le 10^8$(주관) 자료구조: 없음(주관) 알고리즘: 수학(주관) 예상 시간복잡도: $O(n)$합이 $s$인 $n$개의 자연수 집합을 구하고, 그 중 원소의 합이 최대인 집합을 오름차순으로 정렬한다. STEP 1. 관찰과 직관프로그래머스에 주어진 예시가 $n=2$라서 와닿지는 않는다.왜냐면 $n=2$인 경우에 너무 쉽게 찾을 수 있다.$a_1 = x, x_2 = s-x$라 하면 곱 $f(x) = x(s-x)$이고 이차함수의 최댓값은 $x=s/2$인 지점이다.물론 정수이므로 $a_1 = \lfloor s/2 \rfloor$, $a_2 = s-a_1$으로 간단히 찾.. 2024. 7. 2.
728x90
반응형