<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://acm.khpnets.info/w39/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5</id>
	<title>Быстрое преобразование Фурье - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://acm.khpnets.info/w39/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5"/>
	<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;action=history"/>
	<updated>2026-05-13T11:46:48Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=2724&amp;oldid=prev</id>
		<title>Ctrlalt: /* Ссылки */</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=2724&amp;oldid=prev"/>
		<updated>2021-10-12T00:23:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ссылки&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 00:23, 12 октября 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l64&quot;&gt;Строка 64:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 64:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Ссылки ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Ссылки ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Видео&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [https://www.youtube.com/watch?v=h7apO7q16V0 Reducible — The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever?]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теория&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теория&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://e-maxx.ru/algo/fft_multiply e-maxx.ru — Быстрое преобразование Фурье за O (N log N). Применение к умножению двух полиномов или длинных чисел]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [http://e-maxx.ru/algo/fft_multiply e-maxx.ru — Быстрое преобразование Фурье за O (N log N). Применение к умножению двух полиномов или длинных чисел]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ctrlalt</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=2723&amp;oldid=prev</id>
		<title>Ctrlalt: Новая страница: « using Complex = complex&lt;double&gt;;    void fft(vector&lt;Complex&gt; &amp;p, Complex x) {      size_t n = p.size();      if (n == 1)          return;        vector&lt;Complex&gt;...»</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5&amp;diff=2723&amp;oldid=prev"/>
		<updated>2021-10-11T23:15:12Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: « using Complex = complex&amp;lt;double&amp;gt;;    void fft(vector&amp;lt;Complex&amp;gt; &amp;amp;p, Complex x) {      size_t n = p.size();      if (n == 1)          return;        vector&amp;lt;Complex&amp;gt;...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt; using Complex = complex&amp;lt;double&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
 void fft(vector&amp;lt;Complex&amp;gt; &amp;amp;p, Complex x) {&lt;br /&gt;
     size_t n = p.size();&lt;br /&gt;
     if (n == 1)&lt;br /&gt;
         return;&lt;br /&gt;
 &lt;br /&gt;
     vector&amp;lt;Complex&amp;gt; a(n / 2), b(n / 2);&lt;br /&gt;
     for (int i = 0; i &amp;lt; n / 2; i++) {&lt;br /&gt;
         a[i] = p[2 * i];&lt;br /&gt;
         b[i] = p[2 * i + 1];&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     fft(a, x * x);&lt;br /&gt;
     fft(b, x * x);&lt;br /&gt;
 &lt;br /&gt;
     Complex xPow = 1;&lt;br /&gt;
     for (int i = 0; i &amp;lt; n / 2; i++) {&lt;br /&gt;
         p[i] = a[i] + xPow * b[i];&lt;br /&gt;
         p[n / 2 + i] = a[i] - xPow * b[i];&lt;br /&gt;
         xPow *= x;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 const double PI = acos(-1);&lt;br /&gt;
 &lt;br /&gt;
 vector&amp;lt;Complex&amp;gt; fixSize(vector&amp;lt;int&amp;gt; &amp;amp;p, int targetSize) {&lt;br /&gt;
     vector&amp;lt;Complex&amp;gt; res(p.begin(), p.end());&lt;br /&gt;
     while (res.size() &amp;lt; targetSize || (res.size() &amp;amp; (res.size() - 1)))&lt;br /&gt;
         res.push_back(0);&lt;br /&gt;
     return res;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 vector&amp;lt;Complex&amp;gt; evaluate(vector&amp;lt;int&amp;gt; &amp;amp;p, int targetSize) {&lt;br /&gt;
     vector&amp;lt;Complex&amp;gt; res = fixSize(p, targetSize);&lt;br /&gt;
     fft(res, polar(1.0, 2 * PI / res.size()));&lt;br /&gt;
     return res;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 vector&amp;lt;int&amp;gt; interpolate(vector&amp;lt;Complex&amp;gt; &amp;amp;p) {&lt;br /&gt;
     int n = p.size();&lt;br /&gt;
     fft(p, polar(1.0, -2 * PI / n));&lt;br /&gt;
 &lt;br /&gt;
     vector&amp;lt;int&amp;gt; res(n);&lt;br /&gt;
     for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
         res[i] = round(real(p[i]) / n);&lt;br /&gt;
 &lt;br /&gt;
     while (res.size() &amp;gt; 1 &amp;amp;&amp;amp; !res.back())&lt;br /&gt;
         res.pop_back();&lt;br /&gt;
     return res;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 vector&amp;lt;int&amp;gt; multiply(vector&amp;lt;int&amp;gt; &amp;amp;pa, vector&amp;lt;int&amp;gt; &amp;amp;pb) {&lt;br /&gt;
     int targetSize = pa.size() + pb.size();&lt;br /&gt;
     vector&amp;lt;Complex&amp;gt; a = evaluate(pa, targetSize);&lt;br /&gt;
     vector&amp;lt;Complex&amp;gt; b = evaluate(pb, targetSize);&lt;br /&gt;
 &lt;br /&gt;
     for (int i = 0; i &amp;lt; a.size(); i++)&lt;br /&gt;
         a[i] *= b[i];&lt;br /&gt;
 &lt;br /&gt;
     return interpolate(a);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
Теория&lt;br /&gt;
* [http://e-maxx.ru/algo/fft_multiply e-maxx.ru — Быстрое преобразование Фурье за O (N log N). Применение к умножению двух полиномов или длинных чисел]&lt;br /&gt;
* [https://cp-algorithms.com/algebra/fft.html cp-algorithms.com — Fast Fourier transform]&lt;br /&gt;
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 neerc.ifmo.ru/wiki — Быстрое преобразование Фурье]&lt;br /&gt;
* algorithmica.org — Быстрое преобразование Фурье [https://ru.algorithmica.org/cs/algebra/fft/ 1], [https://algorithmica.org/ru/fft 2]&lt;br /&gt;
* [https://drive.google.com/file/d/1IdjyWinAT3Qo9oSonFj21VASBCJsxltB/view Кульков А. — Быстрое преобразование Фурье и многочлены]&lt;br /&gt;
* [https://usaco.guide/adv/fft?lang=cpp usaco.guide — Introduction to Fast Fourier Transform]&lt;br /&gt;
&lt;br /&gt;
Код&lt;br /&gt;
* [https://github.com/indy256/codelibrary/blob/master/cpp/numeric/fft.h indy256/codelibrary/cpp/numeric/fft.h]&lt;br /&gt;
* [https://github.com/indy256/codelibrary/blob/master/cpp/numeric/fft_slow.cpp indy256/codelibrary/cpp/numeric/fft_slow.cpp]&lt;br /&gt;
* [https://github.com/ADJA/algos/blob/master/NumberTheory/FFT.cpp ADJA/algos/NumberTheory/FFT.cpp]&lt;br /&gt;
* [https://github.com/kevin-wayne/algs4/blob/master/src/main/java/edu/princeton/cs/algs4/FFT.java kevin-wayne/algs4/FFT.java]&lt;/div&gt;</summary>
		<author><name>Ctrlalt</name></author>
	</entry>
</feed>