초기에는 g=f0−1로 두면 fg≡1(modx)이다. 길이 m의 역원 g를 알고 있을 때 Newton 갱신
g′=2g−fg2(modx2m)
을 사용하면 정밀도를 두 배로 늘릴 수 있다. 일반적인 두 번의 full convolution 구현은 정확하지만 N=220에서 정규화 비용이 약 24이므로 만점을 받지 못한다.
만점 구성은 q=fg2의 필요한 높은 절반을 두 종류의 cyclic convolution으로 복원한다. g의 길이는 m이고 f는 길이 2m로 잘라서 사용한다.
먼저 길이 2m의 cyclic convolution으로
u=qmod(x2m−1)
을 계산한다. 이는 길이 2m의 DFT 두 번과 IDFT 한 번으로 얻는다.
다음으로 r을 원시 4m제곱근으로 잡고 j=rm이라 하자. 계수에 ri를 곱하고 f를 FOLD로 xm−1에 대해 접은 뒤 길이 m의 cyclic convolution을 계산한다. 역변환 뒤 r−i를 곱하면
vk=qk+jqk+m−qk+2m−jqk+3m
을 얻는다.
0≤k<m에 대해
A=qk,B=qk+m,C=qk+2m,D=qk+3m
라 두면
ulow=A+C,uhigh=B+D,
v=A+jB−C−jD.
또한 fg≡1(modxm)이므로 q=fg2≡g(modxm)이고 A=gk이다. 따라서
−B=2j(ulow+v−2g)−uhigh.
Newton 갱신에서 새 높은 절반은 정확히 −B이므로 위 식을 그대로 계산하여 g의 뒤에 붙이면 된다.
각 단계는 길이 2m 변환 세 번과 길이 m 변환 세 번을 사용한다. N=2K일 때 총 비용은
3k=0∑K−1(D(2k+1)+D(2k))=(9K−12)N+12.
따라서 N=220에서
C=8.400000572…<9
이므로 만점을 받는다. N이 2의 거듭제곱이 아니면 각 단계에서 0으로 패딩하고 마지막에 길이 N으로 자르면 된다.
DFT의 주파수 순서를 알 필요는 없다. 같은 길이의 두 DFT 결과를 원소별로 곱하는 연산만 사용하므로 명세가 보장하는 opaque-order 성질만으로 충분하다.
Solution written by GPT5.6