SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
0
Fast Fourier Transform
Sogang ICPC Team – 2019 여름 고급 스터디
Suhyun Park
acm.sogang.ac.kr
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
Convolution
ci =
i
∑
j=0
ajbi−j
를 O (nlogn)만에 계산하는 데 쓰이는 알고리즘이다
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
오늘의 스터디 끝!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
Convolution
··· 이 아니고, 사실 저도 이해하는 걸 포기했습니다 (어서 신호처리
들으세요)
PS에서는 저걸 계산하는 데에만 쓰기 때문에 원리는 이해하지 않아도
괜찮을 거 같고··· 어서 이 코드를 팀노트에 복사합시다.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
Convolution
anxn
+an−1xn−1
+···+a1x1
+a0
× bnxn
+bn−1xn−1
+···+b1x1
+b0
= c2nx2n
+c2n−1x2n−1
+···+c1x1
+c0
⇒ ci =
i
∑
j=0
ajbi−j 0 ≤ i ≤ 2n
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
르모앙의 추측 BOJ #17134
5보다 큰 홀수는 홀수 소수 하나와 짝수 세미소수 하나의 합으로
나타낼 수 있다. 세미소수는 두 소수를 곱한 수이다.
홀수 N이 주어졌을 때, 홀수 소수 하나와 짝수 세미소수 하나의 합으로
나타내는 방법의 수를 구해보자.
▶ N ≤ 106
▶ 테스트 케이스 ≤ 105
개
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
르모앙의 추측 BOJ #17134
두 개의 소수 p, q가 있다면 N = p+2q인 경우의 수를 세라는 의미
(p ̸= 2)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
르모앙의 추측 BOJ #17134
0+0·x1
+0·x2
+1·x3
+0·x4
+1·x5
+0·x6
+1·x7
+···
홀수 소수 차수의 항에서만 계수가 1
× 0+0·x1
+0·x2
+0·x3
+1·x4
+0·x5
+1·x6
+0·x7
+···
짝수 세미소수 차수의 항에서만 계수가 1
= ?
Remark: ci =
i
∑
j=0
ajbi−j 0 ≤ i ≤ 2n
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
르모앙의 추측 BOJ #17134
0+0·x1
+0·x2
+1·x3
+0·x4
+1·x5
+0·x6
+1·x7
+···
홀수 소수 차수의 항에서만 계수가 1
× 0+0·x1
+0·x2
+0·x3
+1·x4
+0·x5
+1·x6
+0·x7
+···
짝수 세미소수 차수의 항에서만 계수가 1
를 하면 나오는 다항식의 모든 항 cixi
에 대해 ci 는 N = i일 때의 경우의
수가 된다
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
르모앙의 추측 BOJ #17134
그런데 2×106
log 2×106
이 시간 안에 통과할까?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
르모앙의 추측 BOJ #17134
어차피 들어오는 쿼리는 전부 홀수이므로 우리는 c2k+1 에만 관심이
있으며 a2k 와 b2k+1 은 모든 k에 대해 어차피 0이니까
a′
i = a2i+1 b′
i = b2i c′
i = c2i+1
이라고 하면
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
르모앙의 추측 BOJ #17134
a′
i = a2i+1 b′
i = b2i c′
i = c2i+1
c′
i = c2i+1 =
2i+1
∑
j=0
ajb(2i+1)−j
=
i
∑
j=0
a2 j
=0
b(2i+1)−2 j +
i
∑
j=0
a2j+1
=a′
j
b(2i+1)−(2j+1)
=
i
∑
j=0
a′
j b2i−2 j
=b′
i−j
=
i
∑
j=0
a′
jb′
i−j 0 ≤ i ≤ n
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
르모앙의 추측 BOJ #17134
이렇게 하면 106
log 106
으로 줄어들고 N 이 들어오면 c′
N 대신 c′
⌊N
2 ⌋
을 구하면 된다 (물론 c′
i 는 전처리)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
르모앙의 추측 BOJ #17134
83 vector<int> c(1000001), a(1000001), b(1000001);
84
85 bitset<1000001> sieve;
86
87 int main() {
88 cin.tie(nullptr);
89 cout.tie(nullptr);
90 ios_base ::sync_with_stdio(false);
91
92 sieve.flip();
93 for (int i = 2; i <= 1000000; i ++) {
94 if (!sieve[i]) continue;
95 if (i != 2) a[i / 2] = 1;
96 if (i <= 500000) b[i] = 1;
97 for (int j = i * 2; j <= 1000000; j += i) {
98 sieve[j] = false;
99 }
100 }
source code
에라토스테네스의 체 돌리면서 a′
i, b′
i 전처리 – O (nloglogn)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
르모앙의 추측 BOJ #17134
102 multiply(a, b, c);
103
104 int n;
105 cin >> n;
106 while (n --) {
107 int x;
108 cin >> x;
109 cout << c[x / 2] << 'n';
110 }
111
112 return 0;
113 }
source code
FFT로 c′
전처리 – O (nlogn)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
르모앙의 추측 BOJ #17134
102 multiply(a, b, c);
103
104 int n;
105 cin >> n;
106 while (n --) {
107 int x;
108 cin >> x;
109 cout << c[x / 2] << 'n';
110 }
111
112 return 0;
113 }
source code
c를 계산하는 대신 c′
를 계산해 두고, 쿼리가 들어오면 c′
⌊N
2 ⌋ 출력 –
쿼리 각각은 O (1)

Contenu connexe

Tendances

[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석jaypi Ko
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료beom kyun choi
 
[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론jaypi Ko
 
딥러닝기본-신경망기초
딥러닝기본-신경망기초딥러닝기본-신경망기초
딥러닝기본-신경망기초jaypi Ko
 
cuda포스터-박일남
cuda포스터-박일남cuda포스터-박일남
cuda포스터-박일남DzH QWuynh
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예zupet
 
해커에게 전해들은 머신러닝 #1
해커에게 전해들은 머신러닝 #1해커에게 전해들은 머신러닝 #1
해커에게 전해들은 머신러닝 #1Haesun Park
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀beom kyun choi
 
HI-ARC Number Theory
HI-ARC Number TheoryHI-ARC Number Theory
HI-ARC Number TheoryJae-yeol Lee
 
HI-ARC PS 102 Bitmask
HI-ARC PS 102 BitmaskHI-ARC PS 102 Bitmask
HI-ARC PS 102 BitmaskJae-yeol Lee
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
 
[시즌2, week3] R Basic
[시즌2, week3] R Basic[시즌2, week3] R Basic
[시즌2, week3] R Basicneuroassociates
 
해커에게 전해들은 머신러닝 #3
해커에게 전해들은 머신러닝 #3해커에게 전해들은 머신러닝 #3
해커에게 전해들은 머신러닝 #3Haesun Park
 
TestSDS2018-1(answer)
TestSDS2018-1(answer)TestSDS2018-1(answer)
TestSDS2018-1(answer)Yong Heui Cho
 
2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdfkd19h
 

Tendances (20)

[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
 
[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론
 
딥러닝기본-신경망기초
딥러닝기본-신경망기초딥러닝기본-신경망기초
딥러닝기본-신경망기초
 
cuda포스터-박일남
cuda포스터-박일남cuda포스터-박일남
cuda포스터-박일남
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
해커에게 전해들은 머신러닝 #1
해커에게 전해들은 머신러닝 #1해커에게 전해들은 머신러닝 #1
해커에게 전해들은 머신러닝 #1
 
BOJ4743
BOJ4743BOJ4743
BOJ4743
 
3D Graphics 101
3D Graphics 1013D Graphics 101
3D Graphics 101
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
Tda jisu kim
Tda jisu kimTda jisu kim
Tda jisu kim
 
HI-ARC Number Theory
HI-ARC Number TheoryHI-ARC Number Theory
HI-ARC Number Theory
 
HI-ARC PS 102 Bitmask
HI-ARC PS 102 BitmaskHI-ARC PS 102 Bitmask
HI-ARC PS 102 Bitmask
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
[시즌2, week3] R Basic
[시즌2, week3] R Basic[시즌2, week3] R Basic
[시즌2, week3] R Basic
 
해커에게 전해들은 머신러닝 #3
해커에게 전해들은 머신러닝 #3해커에게 전해들은 머신러닝 #3
해커에게 전해들은 머신러닝 #3
 
BOJ11230
BOJ11230BOJ11230
BOJ11230
 
TestSDS2018-1(answer)
TestSDS2018-1(answer)TestSDS2018-1(answer)
TestSDS2018-1(answer)
 
2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf
 

Fast Fourier Transform - Sogang ICPC Team, 2019