SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
acmicpc.net 1492번 풀이
장홍준
hongjun7@korea.ac.kr
• 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
합

Contenu connexe

Tendances

AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Inc.
 
AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Inc.
 
AtCoder Beginner Contest 003 解説
AtCoder Beginner Contest 003 解説AtCoder Beginner Contest 003 解説
AtCoder Beginner Contest 003 解説AtCoder Inc.
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Inc.
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기NAVER D2
 
Python for Chemistry
Python for ChemistryPython for Chemistry
Python for Chemistrybaoilleach
 
CODE FESTIVAL 2014 予選A 解説
CODE FESTIVAL 2014 予選A 解説CODE FESTIVAL 2014 予選A 解説
CODE FESTIVAL 2014 予選A 解説AtCoder Inc.
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Inc.
 
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Inc.
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Inc.
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Inc.
 
AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Inc.
 
AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Inc.
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Inc.
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Inc.
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Inc.
 

Tendances (20)

AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
 
AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説
 
ABC001 解説
ABC001 解説ABC001 解説
ABC001 解説
 
AtCoder Beginner Contest 003 解説
AtCoder Beginner Contest 003 解説AtCoder Beginner Contest 003 解説
AtCoder Beginner Contest 003 解説
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
 
Python for Chemistry
Python for ChemistryPython for Chemistry
Python for Chemistry
 
CODE FESTIVAL 2014 予選A 解説
CODE FESTIVAL 2014 予選A 解説CODE FESTIVAL 2014 予選A 解説
CODE FESTIVAL 2014 予選A 解説
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説
 
動的計画法
動的計画法動的計画法
動的計画法
 
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説
 
AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説
 
abc031
abc031abc031
abc031
 
AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
 

En vedette

En vedette (7)

M
MM
M
 
COCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solutionCOCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solution
 
4. dynamic programming(1)
4. dynamic programming(1)4. dynamic programming(1)
4. dynamic programming(1)
 
G
GG
G
 
E
EE
E
 
H
HH
H
 
2016 FunctionCup 풀이
2016 FunctionCup 풀이2016 FunctionCup 풀이
2016 FunctionCup 풀이
 

Plus de Hongjun Jang

Teamwork in programming contests
Teamwork in programming contestsTeamwork in programming contests
Teamwork in programming contestsHongjun Jang
 
ALPS & AlKor Intro Slides
ALPS & AlKor Intro SlidesALPS & AlKor Intro Slides
ALPS & AlKor Intro SlidesHongjun Jang
 
Problem Solving GuideBook
Problem Solving GuideBookProblem Solving GuideBook
Problem Solving GuideBookHongjun Jang
 
Sqrt decomposition
Sqrt decompositionSqrt decomposition
Sqrt decompositionHongjun Jang
 
3. basic data structures(2)
3. basic data structures(2)3. basic data structures(2)
3. basic data structures(2)Hongjun Jang
 
2. basic data structures(1)
2. basic data structures(1)2. basic data structures(1)
2. basic data structures(1)Hongjun Jang
 
2016 고려대학교 신입생 프로그래밍 경시대회 해법
2016 고려대학교 신입생 프로그래밍 경시대회 해법2016 고려대학교 신입생 프로그래밍 경시대회 해법
2016 고려대학교 신입생 프로그래밍 경시대회 해법Hongjun Jang
 
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Hongjun Jang
 

Plus de Hongjun Jang (10)

Teamwork in programming contests
Teamwork in programming contestsTeamwork in programming contests
Teamwork in programming contests
 
ALPS & AlKor Intro Slides
ALPS & AlKor Intro SlidesALPS & AlKor Intro Slides
ALPS & AlKor Intro Slides
 
Problem Solving GuideBook
Problem Solving GuideBookProblem Solving GuideBook
Problem Solving GuideBook
 
Network flow
Network flowNetwork flow
Network flow
 
Sqrt decomposition
Sqrt decompositionSqrt decomposition
Sqrt decomposition
 
3. basic data structures(2)
3. basic data structures(2)3. basic data structures(2)
3. basic data structures(2)
 
1. alps c c++
1. alps c c++1. alps c c++
1. alps c c++
 
2. basic data structures(1)
2. basic data structures(1)2. basic data structures(1)
2. basic data structures(1)
 
2016 고려대학교 신입생 프로그래밍 경시대회 해법
2016 고려대학교 신입생 프로그래밍 경시대회 해법2016 고려대학교 신입생 프로그래밍 경시대회 해법
2016 고려대학교 신입생 프로그래밍 경시대회 해법
 
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)
 

Baekjoon Online Judge 1492번 풀이

  • 2. • 1 𝐾 +2 𝐾 +3 𝐾 +…+𝑁 𝐾 를 1000000007로 나눈 나머지 • 1 ≤ 𝑁 ≤ 109 • 1 ≤ 𝐾 ≤ 50 https://www.acmicpc.net/problem/1492 합
  • 3. • 각 항을 모두 계산하는 O(NK)의 방법 • 𝑁𝐾 ≤ 5 × 1010 • 시간초과! https://www.acmicpc.net/problem/1492 합
  • 4. • 만약에 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 합
  • 6. 𝑓(𝑥) = 1 𝑥 +2 𝑥 +3 𝑥 +…+𝑁 𝑥 라고 하면, 𝑛 + 1 𝑘+1 − 1 = 𝑝=0 𝑘 𝑘 + 1 𝑝 𝑓 𝑝 𝑓 𝑘 = 𝑛 + 1 𝑘+1 − 1 − 𝑝=0 𝑘−1 𝑘+1 𝑝 𝑓 𝑝 𝑘+1 𝑘 https://www.acmicpc.net/problem/1492 합
  • 7. 𝑓 𝑥 를 1000000007로 나눈 나머지 값을 구해야 하는데 𝑓 𝑘 = 𝑛 + 1 𝑘+1 − 1 − 𝑝=0 𝑘−1 𝑘+1 𝑝 𝑓 𝑝 𝑘+1 𝑘 분모에 저 𝑘+1 𝑘 은 어떻게 할까? 곱셈의 역원을 곱해주자! https://www.acmicpc.net/problem/1492 합
  • 8. 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 합
  • 9. 조합(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 합