본문 바로가기

전체 글

(152)
SOS dp sum over subset이라는 이름의 dp입니다. 음이 아닌 정수로 이루어진 길이 $N$의 수열 $A_1$, $A_2$, ... , $A_N$이 주어졌을 때 $0 \le mask < (2^k)$ 인 mask에 대해 $mask | A_i = mask$인 $A_i$의 개수를 구합니다( | 는 bit연산의 or입니다.). 만약 수열 $A$가 0,1,5,6이고 $mask$가 5면 $0|5=5, 1|5=5, 5|5=5, 6|5=7$이므로 답은 3입니다. $mask$가 0일 때 부터 $(2^k) -1$일때 까지의 답을 모두 구하는 문제입니다. $k$는 원하는 값으로 잡으시면 됩니다. $A=(0,1,5,5,6), k=3$이라고 합시다. 숫자끼리 그룹을 지어 줄 것입니다. 먼저, i번째 그룹에는 숫자 i만 들어 있..
백준 14854 - 이항 계수 6 step 1 더보기 $142857=3^3*11*13*37$입니다. 만약 어떤 수 $n$에 대해 27,11,13,37로 나눈 나머지를 알 수 있다면 $n$을 142857로 나눈 나머지도 알 수 있습니다. step 2 더보기 ${n \choose k} = \frac{n!}{k!(n-k)!}$를 27로 나눈 나머지에 대해서만 생각해 봅시다. 만약 소인수분해를 했을 때 3이 3개 이상 나온다면 나머지는 0입니다. 이는 $O(log\ n)$에 해결할 수 있습니다.(https://codestudycafe.tistory.com/1) 어떤 수를 소인수분해를 하면 $2^{x_1}* 3^{x_2}* 5^{x_3} ..$ 식으로 나옵니다. 3이 몇 개 나오는지는 알았으니 나머지에 대해서만 생각하면 됩니다. $f(x) = n..
x/y (mod n) 계산 오일러 정리에 의하면 $a^{\varphi(n)} \equiv 1\pmod{n}$ 입니다. 이때 $\varphi(n)$(오일러 피 함수)은 1부터 $n$까지의 수 중 $n$과 서로소인 수의 개수입니다. $a$와 $n$이 서로소일 때만 가능합니다. 오일러 피 함수 구하기 더보기 $\varphi(n)$ 는 몇가지 특징이 있어 생각보다 쉽게 구할 수 있습니다. $p$가 소수일 때 $\varphi(p) = p-1$ $\varphi(pq)= \varphi(p) * \varphi(q) $ $ \varphi(p^n)=p^n - p^{n-1} $ 이를 잘 이용하면 소인수분해를 이용해서 구할 수 있습니다. 오일러 정리를 이용하면 모듈러 연산에서 나눗셈을 할 수 있습니다. $\begin{matrix} &a^{\varphi..