Baekjoon Online Judge 1492번 풀이

10
acmicpc.net 1492번 풀이 장홍준 [email protected]

Transcript of Baekjoon Online Judge 1492번 풀이

Page 1: Baekjoon Online Judge 1492번 풀이

acmicpc.net 1492번 풀이장홍준[email protected]

Page 2: Baekjoon Online Judge 1492번 풀이

• 1𝐾+2𝐾+3𝐾+…+𝑁𝐾를 1000000007로 나눈 나머지• 1 ≤ 𝑁 ≤ 109

• 1 ≤ 𝐾 ≤ 50

https://www.acmicpc.net/problem/1492

Page 3: Baekjoon Online Judge 1492번 풀이

• 각 항을 모두 계산하는 O(NK)의 방법• 𝑁𝐾 ≤ 5 × 1010

• 시간초과!

https://www.acmicpc.net/problem/1492

Page 4: Baekjoon Online Judge 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

Page 5: Baekjoon Online Judge 1492번 풀이

• https://en.wikipedia.org/wiki/Faulhaber%27s_formula

https://www.acmicpc.net/problem/1492

Page 6: Baekjoon Online Judge 1492번 풀이

𝑓(𝑥) = 1𝑥+2𝑥+3𝑥+…+𝑁𝑥 라고 하면,

𝑛 + 1 𝑘+1 − 1 =

𝑝=0

𝑘𝑘 + 1

𝑝𝑓 𝑝

𝑓 𝑘 =𝑛 + 1 𝑘+1 − 1 − 𝑝=0

𝑘−1 𝑘+1𝑝𝑓 𝑝

𝑘+1𝑘

https://www.acmicpc.net/problem/1492

Page 7: Baekjoon Online Judge 1492번 풀이

𝑓 𝑥 를 1000000007로 나눈 나머지 값을 구해야 하는데

𝑓 𝑘 =𝑛 + 1 𝑘+1 − 1 − 𝑝=0

𝑘−1 𝑘+1𝑝𝑓 𝑝

𝑘+1𝑘

분모에 저 𝑘+1𝑘

은 어떻게 할까?

곱셈의 역원을 곱해주자!

https://www.acmicpc.net/problem/1492

Page 8: Baekjoon Online Judge 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

Page 9: Baekjoon Online Judge 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

Page 10: Baekjoon Online Judge 1492번 풀이

http://ideone.com/vP5eFY

https://www.acmicpc.net/problem/1492