Baekjoon Online Judge 1492번 풀이
-
Upload
hongjun-jang -
Category
Technology
-
view
2.082 -
download
5
Transcript of Baekjoon Online Judge 1492번 풀이
acmicpc.net 1492번 풀이장홍준[email protected]
• 1𝐾+2𝐾+3𝐾+…+𝑁𝐾를 1000000007로 나눈 나머지• 1 ≤ 𝑁 ≤ 109
• 1 ≤ 𝐾 ≤ 50
https://www.acmicpc.net/problem/1492
합
• 각 항을 모두 계산하는 O(NK)의 방법• 𝑁𝐾 ≤ 5 × 1010
• 시간초과!
https://www.acmicpc.net/problem/1492
합
• 만약에 K가 1이라면?...• 1+2+3+…+N = N(N+1)/2• 깔끔한 일반식이 등장했다.
• 만약에 K가 2라면?...• 12+22+32+…+𝑁2=(N+1)(N+2)(2N+1)/6
• 일반식을 구해서 풀면 되겠다!
https://www.acmicpc.net/problem/1492
합
• https://en.wikipedia.org/wiki/Faulhaber%27s_formula
https://www.acmicpc.net/problem/1492
합
𝑓(𝑥) = 1𝑥+2𝑥+3𝑥+…+𝑁𝑥 라고 하면,
𝑛 + 1 𝑘+1 − 1 =
𝑝=0
𝑘𝑘 + 1
𝑝𝑓 𝑝
𝑓 𝑘 =𝑛 + 1 𝑘+1 − 1 − 𝑝=0
𝑘−1 𝑘+1𝑝𝑓 𝑝
𝑘+1𝑘
https://www.acmicpc.net/problem/1492
합
𝑓 𝑥 를 1000000007로 나눈 나머지 값을 구해야 하는데
𝑓 𝑘 =𝑛 + 1 𝑘+1 − 1 − 𝑝=0
𝑘−1 𝑘+1𝑝𝑓 𝑝
𝑘+1𝑘
분모에 저 𝑘+1𝑘
은 어떻게 할까?
곱셈의 역원을 곱해주자!
https://www.acmicpc.net/problem/1492
합
p = 1000000007이 소수이므로 오일러의 정리에 의해서
P와 서로소인 정수 𝑎에 대해 𝑎𝑝−1 ≡ 1(mod p)
따라서 𝑎𝑝−2을 X에 곱하면 X/ 𝑎 (mod p)가 구해지겠구나!
𝑓 𝑘 = 𝑛 + 1 𝑘+1 − 1 −
𝑝=0
𝑘−1𝑘 + 1
𝑝𝑓 𝑝 ×
𝑘 + 1
𝑘
𝑝−2
https://www.acmicpc.net/problem/1492
합
조합(Combination)은 파스칼 삼각형으로 구하면 편해요.
𝑎𝑏을 빠르게 계산하기 위해 다음과 같은 방법을 쓰세요.Power(a, b) {
if (b == 0) return 1;if (b == 1) return a % mod;x = Power(a, b/2);if (b&1) return a*((x*x) % mod) % mod;return (x*x) % mod;
}
https://www.acmicpc.net/problem/1492
합
http://ideone.com/vP5eFY
https://www.acmicpc.net/problem/1492
합