{"id":365903,"date":"2024-05-21T02:47:56","date_gmt":"2024-05-21T02:47:56","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=365903"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T02:47:56","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=365903","title":{"rendered":"<span>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 hackerrank.com \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f <a href=\"https:\/\/www.hackerrank.com\/challenges\/xor-subsequence\/problem\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0434\u0430\u0447\u0430<\/a>. \u041f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <code>short[] A;<\/code> \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, <code>xor<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c. \u0421\u0430\u043c \u044d\u0442\u043e\u0442 <code>xor<\/code> \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438.<\/p>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0430\u0432\u043d\u0430 10<sup>5<\/sup>, \u0442\u0430\u043a \u0447\u0442\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042f \u0432 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u0441 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0438 \u0441\u0434\u0430\u043b\u0441\u044f, \u0440\u0435\u0448\u0438\u0432 \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0418 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043f\u043e\u043d\u044f\u043b \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u2014 \u0430\u0432\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0440\u0435\u0448\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0447\u0435\u0440\u0435\u0437 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435.<\/p>\n<h2>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u043b\u0438 \u0435\u0451 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0417\u0430\u0434\u0430\u043d \u043c\u0430\u0441\u0441\u0438\u0432 <code>A<\/code> \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1 \u0434\u043e 65535 (\u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b). \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{1,2,3\\}\" alt=\"\\{1,2,3\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/014\/fec\/742\/014fec74206bbd15686b71c6fe4a5eb1.svg\" width=\"65\" height=\"22\"\/>. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u0435 \u0435\u0433\u043e \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u044b:<\/p>\n<ul>\n<li>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{1\\}, xor = 1\" alt=\"\\{1\\}, xor = 1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e53\/07e\/ab6\/e5307eab65455c70831c08aff156fe78.svg\" width=\"102\" height=\"22\"\/><\/p>\n<\/li>\n<li>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{2\\}, xor = 2\" alt=\"\\{2\\}, xor = 2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d75\/6c1\/62f\/d756c162f4f65d4bb46ddef547ed6da9.svg\" width=\"102\" height=\"22\"\/><\/p>\n<\/li>\n<li>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{3\\}, xor = 3\" alt=\"\\{3\\}, xor = 3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/06f\/d93\/c70\/06fd93c708a41bd58e0046bdf1018403.svg\" width=\"102\" height=\"22\"\/><\/p>\n<\/li>\n<li>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{1, 2\\}, xor = 1 \\oplus 2 = 3\" alt=\"\\{1, 2\\}, xor = 1 \\oplus 2 = 3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/206\/292\/57a\/20629257a40b042e296256559ac75ca0.svg\" width=\"189\" height=\"22\"\/><\/p>\n<\/li>\n<li>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{2, 3\\}, xor = 2 \\oplus 3 = 1\" alt=\"\\{2, 3\\}, xor = 2 \\oplus 3 = 1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c77\/dca\/2d3\/c77dca2d34f99ee57ad67be8c383cfe5.svg\" width=\"189\" height=\"22\"\/><\/p>\n<\/li>\n<li>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{1, 2, 3\\}, xor = 1 \\oplus 2 \\oplus 3= 0\" alt=\"\\{1, 2, 3\\}, xor = 1 \\oplus 2 \\oplus 3= 0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/600\/f12\/016\/600f1201619cadb6eb20c4367ed95fca.svg\" width=\"240\" height=\"22\"\/><\/p>\n<\/li>\n<\/ul>\n<p>2 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043c\u0435\u044e\u0442 <code>xor<\/code> \u0440\u0430\u0432\u043d\u044b\u0439 1, \u0442\u0430\u043a \u0436\u0435 2 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043c\u0435\u044e\u0442 <code>xor<\/code> \u0440\u0430\u0432\u043d\u044b\u0439 3.<br \/>2\u00a0\u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0441\u00a0\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c <code>xor<\/code>\u2011\u043e\u043c. \u0421\u0430\u043c\u00a0\u0436\u0435 <code>xor<\/code> \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0440\u0430\u0432\u043d\u044b\u043c 1, \u043a\u0430\u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0432\u0441\u0435\u0445 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 (1\u00a0\u0438\u043b\u0438 3). \u0418\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438\u00a0\u2014 \u043f\u0430\u0440\u0430 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(1, 2)\" alt=\"(1, 2)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b6f\/730\/64b\/b6f73064b917f68974aa8379a87f2be4.svg\" width=\"43\" height=\"22\"\/>.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e 100000. \u0414\u043b\u0438\u043d\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043a\u0430\u043a <code>N<\/code>.<\/p>\n<h2>\u041d\u0430\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <code>B<\/code>, \u0441\u0442\u0440\u043e\u044f\u0449\u0438\u0439\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ul>\n<li>\n<p><code>B[0] = 0<\/code><\/p>\n<\/li>\n<li>\n<p><code>B[i] = B[i-1] ^ A[i-1]<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0430\u0441\u0441\u0438\u0432 <code>B<\/code> \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 <code>N+1<\/code>. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 <code>B[i]<\/code> (\u043f\u0440\u0438 <code>i > 0<\/code>) \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d <code>xor<\/code>-\u0443 \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 <code>A[k]<\/code> \u0434\u043b\u044f <code>0 &lt;= k &lt; i<\/code>. \u0414\u0430\u043d\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>xor<\/code> \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>[A[i], ..., A[j]]<\/code> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d <code>B[j+1] ^ B[i]<\/code>, \u0442.\u0435. \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0421\u0430\u043c \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0437\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0442\u043e\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c <code>xor<\/code> \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432. \u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (65536 \u2014 \u044d\u0442\u043e 2<sup>16<\/sup>):<\/p>\n<pre><code class=\"java\">int[] frequencies = new int[65536];  for (int i = 0; i &lt; N; i++) {     for (int j = i; j &lt; N; j++) {         ++frequencies[B[j + 1] ^ B[i]];     } }  int maxFrequency = max(frequencies); int xor = indexOf(frequencies, maxFrequency);<\/code><\/pre>\n<p>\u0422\u0440\u043e\u0439\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043c\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u043b\u0438, \u0430 \u0432\u043e\u0442 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043b\u0441\u044f, \u0438 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e. \u0412 \u043d\u0451\u043c \u0431\u0443\u0434\u0435\u0442 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\frac{N(N+1)}{2}\" alt=\"\\frac{N(N+1)}{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aed\/bcc\/bf9\/aedbccbf9af83f70d1110ccff106e3af.svg\" width=\"89\" height=\"45\"\/> \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0447\u0442\u043e \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 5*10<sup>9<\/sup>.<\/p>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043c\u043a\u0438, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 (4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0434\u043b\u044f Java, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440).<\/p>\n<h2>\u041a\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0440<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/24d\/656\/a80\/24d656a805d674270d09edf7c3a2bea3.png\" alt=\"\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438 Editorial\" title=\"\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438 Editorial\" width=\"1240\" height=\"189\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/24d\/656\/a80\/24d656a805d674270d09edf7c3a2bea3.png\"\/><\/p>\n<div><figcaption>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438 Editorial<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432 <em>Editorial<\/em> \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432\u0435\u0440\u043d\u044b\u0439, \u0430 \u0432\u043e\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430 \u2014 \u043f\u043e\u043b\u043d\u0435\u0439\u0448\u0430\u044f \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0438\u0446\u0430, \u0441 \u043a\u043e\u0434\u043e\u043c \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0430\u044f.<br \/>\u0425\u043e\u0442\u044f \u0438 \u043a \u043a\u043e\u0434\u0443 \u0443 \u043c\u0435\u043d\u044f \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043d\u043e \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u0441\u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u0442\u0430\u043c <em>\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439<\/em>.<\/p>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u043c\u0435\u043b\u043e\u0441\u044c \u0432 \u0432\u0438\u0434\u0443, \u0430 \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e. \u0418 \u0441\u0434\u0435\u043b\u0430\u044e \u044d\u0442\u043e \u043d\u0435 \u0437\u0430 3 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u0418\u0434\u0435\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u0430\u043a\u0430\u044f:<\/p>\n<pre><code class=\"java\">long[] C = new long[65536];  for (int i = 0; i &lt;= N; i++) {     ++C[B[i]]; }  convolute(C); C[0] -= N + 1;  long maxFrequency = max(C) \/ 2; long xor = indexOf(C, maxFrequency * 2);<\/code><\/pre>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 2-\u0445 \u0447\u0430\u0441\u0442\u0435\u0439: \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>C<\/code><br \/>(\u0430 \u043d\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>B<\/code>, \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043e) \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e <code>C[0] -= N + 1<\/code>. \u041a \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0432\u044b\u0437\u043e\u0432\u0430 <code>max(C)<\/code> \u043c\u0430\u0441\u0441\u0438\u0432 <code>C<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 <code>frequencies<\/code> \u0432 \u043d\u0430\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 2.<\/p>\n<p>\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u043c\u0441\u044f \u043a \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u043e\u0434\u0443\u043c\u0430\u0432, \u043a\u0430\u043a \u043f\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <code>C<\/code> \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442. \u042d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u043b\u044e\u0447\u043e\u043c \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e.<br \/>\u0412 \u043d\u0430\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 <code>++frequencies[k]<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 <code>k == B[i] ^ B[j]<\/code>,<br \/>\u0433\u0434\u0435 <code>0 &lt;= i &lt; j &lt;= N<\/code> (\u0437\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u0437\u0430\u043c\u0435\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>j + 1 -> j<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0430\u0441\u043a\u0430\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 <code>+1<\/code>, \u0442\u0430\u043a \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u044b).<br \/>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>++<\/code> \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440 <code>(i, j)<\/code>, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <code>B[i] ^ B[j]<\/code> \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b \u0438 \u0440\u0430\u0432\u043d\u044b <code>k<\/code>. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0434\u043b\u044f \u0432\u0441\u0435\u0445 <code>i &lt; j<\/code> \u0438 <code>k == B[i] ^ B[j]<\/code> \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <code>frequencies[k]<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"F_k = \\sum_{i&lt;j,\\:b_i \\oplus b_j = k}1\" alt=\"F_k = \\sum_{i&lt;j,\\:b_i \\oplus b_j = k}1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/984\/60b\/c71\/98460bc71cff5e3f92700740c83e9bf9.svg\" width=\"139\" height=\"49\"\/><\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0431\u044b\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0435 \u0437\u0430\u0434\u0430\u0447\u0438.<br \/><code>A = [1, 2, 3]<br \/>B = [0, 1, 3, 0] ([0, 0^1, 0^1^2, 0^1^2^3])<br \/>C = [2, 1, 0, 2, ...]<br \/><\/code>\u0414\u0430\u043b\u0435\u0435 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 \u043f\u0440\u0438 <code>1<\/code> \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u043c \u043f\u0430\u0440\u044b <code>(i, j)<\/code>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align} &amp; F_0 = 1_{0,3} = 1 &amp; (b_0\\oplus b_3 = 0)\\\\ &amp; F_1 = 1_{0,1}+1_{1,3} = 2 &amp; (b_0\\oplus b_1 = b_1\\oplus b_3 = 1)\\\\ &amp; F_2 = 1_{1,2} = 1 &amp; (b_1\\oplus b_2 = 2)\\\\ &amp; F_3 = 1_{0,2} + 1_{2,3} = 2 &amp; (b_0\\oplus b_2 = b_2\\oplus b_3 = 3) \\end{align}\" alt=\"\\begin{align} &amp; F_0 = 1_{0,3} = 1 &amp; (b_0\\oplus b_3 = 0)\\\\ &amp; F_1 = 1_{0,1}+1_{1,3} = 2 &amp; (b_0\\oplus b_1 = b_1\\oplus b_3 = 1)\\\\ &amp; F_2 = 1_{1,2} = 1 &amp; (b_1\\oplus b_2 = 2)\\\\ &amp; F_3 = 1_{0,2} + 1_{2,3} = 2 &amp; (b_0\\oplus b_2 = b_2\\oplus b_3 = 3) \\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4a9\/8cf\/87e\/4a98cf87ea0cf9befe037ad5110d7bbe.svg\" width=\"400\" height=\"104\"\/><\/p>\n<p>\u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0443\u0442\u043d\u043e\u0435. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 <code>i &lt; j<\/code>: \u0442\u0430\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u0432 \u0441\u0443\u043c\u043c\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442 \u0444\u043e\u0440\u043c\u0443\u043b\u0443. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"F_k^{'}=\\sum_{b_i\\oplus b_j=k}1\" alt=\"F_k^{'}=\\sum_{b_i\\oplus b_j=k}1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/045\/53f\/fe4\/04553ffe4775df5160e3a6b8b37f0716.svg\" width=\"110\" height=\"49\"\/><\/p>\n<p>\u0412 \u043d\u0451\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a <code>i<\/code> \u0438 <code>j<\/code> \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0445 \u043f\u043e\u043b\u043d\u043e\u0435 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u044f\u0432\u043d\u043e:<\/p>\n<p><img class=\"formula\" source=\"F_k^{'}=\\sum_{i&lt;j,\\:b_i\\oplus b_j=k}1 + \\sum_{i>j,\\:b_i\\oplus b_j=k}1 + \\sum_{i=j,\\:b_i\\oplus b_j = k}1&#8243; alt=&#187;F_k^{&#8216;}=\\sum_{i&lt;j,\\:b_i\\oplus b_j=k}1 + \\sum_{i>j,\\:b_i\\oplus b_j=k}1 + \\sum_{i=j,\\:b_i\\oplus b_j = k}1&#8243; src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6e9\/f21\/133\/6e9f21133f6a237b4eaa468d75d23379.svg&#187; width=&#187;370&#8243; height=&#187;49&#8243;\/><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <code>k == 0<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 <code>k<\/code> \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (<code>xor<\/code> \u0440\u0430\u0432\u0435\u043d <code>0<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432). \u0410 \u0440\u0430\u0432\u043d\u044f\u0442\u044c\u0441\u044f \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 <code>i<\/code>, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f, \u0442.\u0435. \u0434\u043b\u0438\u043d\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>B<\/code>, \u043e\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 <code>N+1<\/code>. \u0414\u0430\u043b\u0435\u0435, \u0441\u0443\u043c\u043c\u044b \u0434\u043b\u044f <code>i&lt;j<\/code> \u0438 \u0434\u043b\u044f <code>i>j<\/code> \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e \u0440\u0430\u0432\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a <code>xor<\/code> \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u0438\u0432\u0435\u043d. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435, \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0432\u0438\u0434\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align} &amp; F_0^{'} = 2F_0 + N + 1\\\\ &amp; F_k^{'} = 2F_k \\end{align}\" alt=\"\\begin{align} &amp; F_0^{'} = 2F_0 + N + 1\\\\ &amp; F_k^{'} = 2F_k \\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e6c\/5cb\/d64\/e6c5cbd6450abf6cc037c84be18a1b85.svg\" width=\"158\" height=\"56\"\/><\/p>\n<p>\u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"F^{'}\" alt=\"F^{'}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1c2\/2ff\/212\/1c22ff21272fface5ed5635f107e8c65.svg\" width=\"21\" height=\"22\"\/>.<br \/>\u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 <code>B[i]<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442? \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0435 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u043b\u0438, \u0447\u0442\u043e <code>B[i_1] == B[i_2] == ... == B[i_n]<\/code>, \u0442\u043e \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0441\u0435\u0445 <code>B[i_k] ^ B[j]<\/code> \u0431\u044b\u043b \u0431\u044b \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d, \u0442\u0430\u043a\u0438\u0445 \u043f\u0430\u0440 \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u043e\u0432\u043d\u043e <code>n<\/code> \u0448\u0442\u0443\u043a.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/>\u0434\u043b\u044f \u0432\u0441\u0435\u0445 <code>i<\/code> \u0442\u0430\u043a\u0438\u0445, \u0447\u0442\u043e \u0432\u0441\u0435 <code>B[i]<\/code> \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b \u0438 <code>k == B[i] ^ B[j]<\/code>, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>count(B[i])<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"F_k^{'}\" alt=\"F_k^{'}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ca\/751\/dac\/3ca751dac4304e9fb68e8e1a86f680a8.svg\" width=\"21\" height=\"26\"\/>. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u044c\u0448\u0435, \u043d\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0434\u0430 \u0438 <code>i<\/code> \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0432\u0441\u0435.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"F_k^{'} = \\sum_{b_i \\oplus b_j = k,\\:b_i\\:is\\:unique}count(b_i)\" alt=\"F_k^{'} = \\sum_{b_i \\oplus b_j = k,\\:b_i\\:is\\:unique}count(b_i)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/968\/900\/3f7\/9689003f75d12dc0c4ef961b657a694e.svg\" width=\"257\" height=\"49\"\/><\/p>\n<p>\u0424\u0440\u0430\u0437\u0430 <em>b<sub>i<\/sub> is unique<\/em> \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430, \u043d\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043e\u043d\u0430 \u0434\u0430\u0451\u0442 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e. \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c <code>j<\/code>? \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0434\u043b\u044f \u0432\u0441\u0435\u0445  <code>i<\/code> \u0442\u0430\u043a\u0438\u0445, \u0447\u0442\u043e \u0432\u0441\u0435 <code>B[i]<\/code> \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b, \u0432\u0441\u0435\u0445  <code>j<\/code> \u0442\u0430\u043a\u0438\u0445, \u0447\u0442\u043e \u0432\u0441\u0435 <code>B[j]<\/code> \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b \u0438 <code>k == B[i] ^ B[j]<\/code>, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>count(B[i]) * count(B[j])<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"F_k^{'}\" alt=\"F_k^{'}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ca\/751\/dac\/3ca751dac4304e9fb68e8e1a86f680a8.svg\" width=\"21\" height=\"26\"\/>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"F_k^{'} = \\sum_{b_i \\oplus b_j = k,\\:b_i\\:is\\:unique,\\:b_j\\:is\\:unique}count(b_i)\\cdot count(b_j)\" alt=\"F_k^{'} = \\sum_{b_i \\oplus b_j = k,\\:b_i\\:is\\:unique,\\:b_j\\:is\\:unique}count(b_i)\\cdot count(b_j)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/43e\/c19\/7f9\/43ec197f936eee0c519479602dbc7c5f.svg\" width=\"429\" height=\"49\"\/><\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043a\u043e\u0434 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 <code>C<\/code> \u0432 \u043d\u0451\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 <code>count<\/code>, \u0442.\u0435. <code>C[B[i]] == count(B[i])<\/code>. \u0414\u0430\u043b\u0435\u0435, <code>i<\/code> \u0438 <code>j<\/code> \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u0441\u0434\u0435\u043b\u0430\u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>x<\/code> \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <code>B<\/code>, \u0442\u043e <code>C[x] == 0<\/code>. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>x<\/code> \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 <code>B<\/code>, \u0442\u043e \u043e\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 <code>C[x]<\/code> \u0440\u0430\u0437. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0435\u0433\u043e, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\sum_{p\\oplus q = k}count(p)\\cdot count(q)\" alt=\"\\sum_{p\\oplus q = k}count(p)\\cdot count(q)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9cc\/cdf\/e46\/9cccdfe4699443bdbb94532f2b34f36d.svg\" width=\"202\" height=\"47\"\/><\/p>\n<p>\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435, \u0438\u0437\u0431\u0430\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u0431\u0443\u043a\u0432\u044b <code>q<\/code>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\sum_{p=0}^{65535}count(p)\\cdot count(p\\oplus k)\" alt=\"\\sum_{p=0}^{65535}count(p)\\cdot count(p\\oplus k)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/baa\/c1d\/55c\/baac1d55c4357f315b3f054ccb0d8591.svg\" width=\"229\" height=\"62\"\/><\/p>\n<p>\u0415\u0441\u043b\u0438 <code>p<\/code> \u0438\u043b\u0438 <code>q<\/code> \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <code>B<\/code>, \u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>count<\/code> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e \u0438 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>p<\/code> \u0438 <code>q<\/code> \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0432 <code>B<\/code>. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0442\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u0441\u0443\u043c\u043c\u0430.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"F_k^{'} = \\sum_{p\\oplus q=k}count(p)\\cdot count(q)\" alt=\"F_k^{'} = \\sum_{p\\oplus q=k}count(p)\\cdot count(q)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c40\/b2b\/4f3\/c40b2b4f3e7cafc2da4b02e2cac4bd74.svg\" width=\"249\" height=\"47\"\/><\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0441\u0442\u0440\u043e\u043a\u0435 <code>convolute(C)<\/code>:<\/p>\n<pre><code class=\"java\">long[] tmp = new long[65536];  for (int p = 0; p &lt; 65536; p++) {     for (int q = 0; q &lt; 65536; q++) {         tmp[p ^ q] += C[p] * C[q];     } }  C = tmp;<\/code><\/pre>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u0451\u0440\u0442\u043a\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>C<\/code> \u0441 \u0441\u0430\u043c\u0438\u043c \u0441\u043e\u0431\u043e\u0439.<br \/>\u0422\u0430\u043a \u0436\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c <code>C[0] -= N + 1<\/code> \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 2, \u0438\u0437 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"F\" alt=\"F\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/038\/c46\/dca\/038c46dca0542dc9b8177bc61ace3a76.svg\" width=\"14\" height=\"17\"\/>\u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"F^{'}\" alt=\"F^{'}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/294\/994\/862\/2949948624a6705d626191cd4d3b1029.svg\" width=\"21\" height=\"22\"\/>.<\/p>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0432\u0451\u0440\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430 (FWHT), \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430 <code>O(M*log(M))<\/code> (\u0443 \u043d\u0430\u0441 <code>M = 65536<\/code>) \u0438 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043a\u0430\u043a \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0432\u0451\u0440\u0442\u043a\u0430 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u0430\u043a \u043e\u043d\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0434\u0430 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c.<\/p>\n<h2>\u0414\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/h2>\n<p>\u041b\u044e\u0431\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 (DFT) \u2014 \u0432\u0435\u0449\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/06d\/784\/42f\/06d78442f533a5935962c232aabb5fb5.svg\" width=\"11\" height=\"12\"\/> \u0434\u043b\u0438\u043d\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f9d\/3ca\/f47\/f9d3caf47bef8e288585108207620062.svg\" width=\"12\" height=\"12\"\/>, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"X\" alt=\"X\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a22\/7aa\/8d5\/a227aa8d5f6b8e67ece5f0d541133b01.svg\" width=\"16\" height=\"17\"\/>\u0434\u043b\u0438\u043d\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6a3\/afb\/052\/6a3afb05207c201caf933eaeefc0593f.svg\" width=\"12\" height=\"12\"\/>, \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440. \u0418\u043b\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0443, \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e. \u041d\u0430\u0447\u043d\u0443 \u044f \u0441 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435, \u0430 \u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430 (WHT) \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u043f\u043e\u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x=\\{x_0, \\ldots, x_{n-1}\\}\" alt=\"x=\\{x_0, \\ldots, x_{n-1}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/984\/b7a\/d9b\/984b7ad9b73df1d163df87fc38e0ba7e.svg\" width=\"157\" height=\"22\"\/>\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/44a\/80d\/d53\/44a80dd539d51b7f659d9d44e7623295.svg\" width=\"12\" height=\"12\"\/>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F} = \\begin{pmatrix} 1 &amp; 1 &amp; 1 &amp; \\dots &amp; 1 \\\\ 1 &amp; \\omega &amp; \\omega^2 &amp; \\dots &amp; \\omega^{n-1} \\\\ 1 &amp; \\omega^2 &amp; \\omega^{2\\cdot 2} &amp; \\dots &amp; \\omega^{2(n-1)} \\\\ \\vdots &amp; \\vdots &amp; \\vdots &amp; \\ddots &amp; \\vdots \\\\ 1 &amp; \\omega^{n-1} &amp; \\omega^{(n-1)\\cdot 2} &amp; \\dots &amp; \\omega^{(n-1)^2} \\\\ \\end{pmatrix}\" alt=\"\\mathcal{F} = \\begin{pmatrix} 1 &amp; 1 &amp; 1 &amp; \\dots &amp; 1 \\\\ 1 &amp; \\omega &amp; \\omega^2 &amp; \\dots &amp; \\omega^{n-1} \\\\ 1 &amp; \\omega^2 &amp; \\omega^{2\\cdot 2} &amp; \\dots &amp; \\omega^{2(n-1)} \\\\ \\vdots &amp; \\vdots &amp; \\vdots &amp; \\ddots &amp; \\vdots \\\\ 1 &amp; \\omega^{n-1} &amp; \\omega^{(n-1)\\cdot 2} &amp; \\dots &amp; \\omega^{(n-1)^2} \\\\ \\end{pmatrix}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a6d\/4ef\/4cb\/a6d4ef4cb826382e0d0a4be16a5e853b.svg\" width=\"350\" height=\"151\"\/><\/p>\n<p>\u0433\u0434\u0435<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega=e^{-\\frac{2\\pi i}{n}}\" alt=\"\\omega=e^{-\\frac{2\\pi i}{n}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/594\/b1a\/ecc\/594b1aecc3397577869240f4e2f40b45.svg\" width=\"80\" height=\"24\"\/> \u2014 \u043a\u043e\u0440\u0435\u043d\u044c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/662\/a65\/d88\/662a65d889dd9d81cebbca3def37630d.svg\" width=\"12\" height=\"12\"\/>-\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438\u0437 1. \u042d\u0442\u043e \u0432 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435. \u0412\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c.<br \/>\u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"X\" alt=\"X\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a6f\/244\/564\/a6f244564bc2438d460e6b9160937cec.svg\" width=\"16\" height=\"17\"\/>\u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/afa\/54c\/06b\/afa54c06bd765dd1ddb54ae11ab58159.svg\" width=\"11\" height=\"12\"\/>, \u043e\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}^{-1} = \\frac{1}{n} \\begin{pmatrix} 1 &amp; 1 &amp; 1 &amp; \\dots &amp; 1 \\\\ 1 &amp; \\omega^{-1} &amp; \\omega^{-2} &amp; \\dots &amp; \\omega^{-(n-1)} \\\\ 1 &amp; \\omega^{-2} &amp; \\omega^{-2\\cdot 2} &amp; \\dots &amp; \\omega^{-2(n-1)} \\\\ \\vdots &amp; \\vdots &amp; \\vdots &amp; \\ddots &amp; \\vdots \\\\ 1 &amp; \\omega^{-(n-1)} &amp; \\omega^{-(n-1)\\cdot 2} &amp; \\dots &amp; \\omega^{-(n-1)^2} \\\\ \\end{pmatrix}\" alt=\"\\mathcal{F}^{-1} = \\frac{1}{n} \\begin{pmatrix} 1 &amp; 1 &amp; 1 &amp; \\dots &amp; 1 \\\\ 1 &amp; \\omega^{-1} &amp; \\omega^{-2} &amp; \\dots &amp; \\omega^{-(n-1)} \\\\ 1 &amp; \\omega^{-2} &amp; \\omega^{-2\\cdot 2} &amp; \\dots &amp; \\omega^{-2(n-1)} \\\\ \\vdots &amp; \\vdots &amp; \\vdots &amp; \\ddots &amp; \\vdots \\\\ 1 &amp; \\omega^{-(n-1)} &amp; \\omega^{-(n-1)\\cdot 2} &amp; \\dots &amp; \\omega^{-(n-1)^2} \\\\ \\end{pmatrix}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d2a\/364\/9be\/d2a3649be7cebaadd238dc24ecb5199c.svg\" width=\"431\" height=\"152\"\/><\/p>\n<p>\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\frac{1}{n}\" alt=\"\\frac{1}{n}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c0e\/770\/f52\/c0e770f52a2d76de66a0252b0a2e66a9.svg\" width=\"19\" height=\"42\"\/> \u2014 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align} &amp; X = \\mathcal{F}x\\\\ &amp; x = \\mathcal{F}^{-1}X \\end{align}\" alt=\"\\begin{align} &amp; X = \\mathcal{F}x\\\\ &amp; x = \\mathcal{F}^{-1}X \\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce2\/0d6\/3b0\/ce20d63b0bf553832e4e27b3047d623a.svg\" width=\"95\" height=\"49\"\/><\/p>\n<p>\u0422\u0443\u0442 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}\" alt=\"\\mathcal{F}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8aa\/dd9\/cf5\/8aadd9cf58b3c77911ccbbd907a33b65.svg\" width=\"16\" height=\"17\"\/>\u0440\u0430\u0432\u0435\u043d<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\sqrt{n}\" alt=\"\\sqrt{n}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c7\/d01\/439\/8c7d01439ce0c22a953f4f2f85010494.svg\" width=\"28\" height=\"23\"\/>.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}_{p,q} = \\omega^{pq} = e^{-\\frac{2\\pi i p q}{n}}, 0\\le p&lt;n, 0\\le q &lt; n\" alt=\"\\mathcal{F}_{p,q} = \\omega^{pq} = e^{-\\frac{2\\pi i p q}{n}}, 0\\le p&lt;n, 0\\le q &lt; n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c10\/b15\/e2b\/c10b15e2b8023cc5e65c80d0966ceb7f.svg\" width=\"344\" height=\"31\"\/><\/p>\n<h2>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/h2>\n<p>\u041f\u0440\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u0438\u0448\u0443\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438, \u0438\u043b\u0438 \u0442\u0438\u043f\u0430 \u0442\u043e\u0433\u043e. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u0435\u043d\u044f \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442. \u0427\u0438\u0441\u0442\u043e \u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 (\u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0430\u0444\u0444\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f). \u041f\u0440\u043e\u0441\u0442\u043e \u0431\u0430\u0437\u0438\u0441 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432 \u043d\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0434\u0435\u043b\u0435.<\/p>\n<p>\u0414\u043b\u044f DFT \u0431\u0430\u0437\u0438\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"f_q=\\{\\frac{1}{n}, \\frac{1}{n}e^{\\frac{2\\pi i q}{n}}, \\frac{1}{n}e^{\\frac{2\\pi i q \\cdot 2}{n}},\\dots, \\frac{1}{n}e^{\\frac{2\\pi i q(n-1)}{n}}\\}\" alt=\"f_q=\\{\\frac{1}{n}, \\frac{1}{n}e^{\\frac{2\\pi i q}{n}}, \\frac{1}{n}e^{\\frac{2\\pi i q \\cdot 2}{n}},\\dots, \\frac{1}{n}e^{\\frac{2\\pi i q(n-1)}{n}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7af\/e8d\/053\/7afe8d0532c66b344016ec9cd5959a17.svg\" width=\"338\" height=\"42\"\/>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"x=\\sum_q{X_q f_q}\" alt=\"x=\\sum_q{X_q f_q}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ad\/4a2\/1f2\/9ad4a21f2f2ff47669bbd2a5e54a32ad.svg\" width=\"110\" height=\"46\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"X_q\" alt=\"X_q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc3\/fe3\/1df\/cc3fe31dfb40b3014d206d8985a2e749.svg\" width=\"24\" height=\"22\"\/> \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0432 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f53\/2e3\/882\/f532e3882c14e8b4ba324b50f8cb5522.svg\" width=\"11\" height=\"12\"\/>\u043f\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"f_q\" alt=\"f_q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/679\/4d4\/94d\/6794d494dbd2066a782fb2665ae1374a.svg\" width=\"18\" height=\"22\"\/>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0442\u043e, \u0447\u0442\u043e \u0442\u0443\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u2014 \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e DFT \u0432 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u043c \u0432\u0438\u0434\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0432\u0438\u0434\u0438\u043c, \u043f\u043e\u0447\u0435\u043c\u0443<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"X_q\" alt=\"X_q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eb4\/70e\/9e7\/eb470e9e74b85c1ccd93378b07463a69.svg\" width=\"24\" height=\"22\"\/>, \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0435 DFT, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"f_q=\\{\\frac{1}{n}, \\frac{1}{n}\\overline{\\omega}^q, \\frac{1}{n}\\overline{\\omega}^{2q},\\dots, \\frac{1}{n}\\overline{\\omega}^{(n-1)q}\\}\" alt=\"f_q=\\{\\frac{1}{n}, \\frac{1}{n}\\overline{\\omega}^q, \\frac{1}{n}\\overline{\\omega}^{2q},\\dots, \\frac{1}{n}\\overline{\\omega}^{(n-1)q}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6c4\/418\/602\/6c4418602bc2c27a20537f92ad25735c.svg\" width=\"303\" height=\"42\"\/><\/p>\n<p>\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0447\u0435\u0440\u0442\u0430 \u043d\u0430\u0434 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega\" alt=\"\\omega\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ccb\/21d\/4f4\/ccb21d4f4a9351cbbc64eefc8d3bea8f.svg\" width=\"12\" height=\"12\"\/> &#8212; \u044d\u0442\u043e \u0441\u0438\u043c\u0432\u043e\u043b \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega=e^{-\\frac{2\\pi i}{n}}\" alt=\"\\omega=e^{-\\frac{2\\pi i}{n}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/594\/b1a\/ecc\/594b1aecc3397577869240f4e2f40b45.svg\" width=\"80\" height=\"24\"\/> \u0432 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\overline{\\omega}=e^{\\frac{2\\pi i}{n}}\" alt=\"\\overline{\\omega}=e^{\\frac{2\\pi i}{n}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c0\/fda\/6ae\/4c0fda6aeeb00a197d8fa5caff0cbc90.svg\" width=\"70\" height=\"24\"\/>. \u042d\u0442\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0430\u0447\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\overline{f}_p=\\{\\frac{1}{n}, \\frac{1}{n}\\omega^p, \\frac{1}{n}\\omega^{2p},\\dots, \\frac{1}{n}\\omega^{(n-1)p}\\}\" alt=\"\\overline{f}_p=\\{\\frac{1}{n}, \\frac{1}{n}\\omega^p, \\frac{1}{n}\\omega^{2p},\\dots, \\frac{1}{n}\\omega^{(n-1)p}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5fa\/959\/9e4\/5fa9599e4c47718956658479835923f7.svg\" width=\"306\" height=\"42\"\/><\/p>\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}\" alt=\"\\mathcal{F}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/646\/7e3\/7dc\/6467e37dc66763fc24bba9dd67dccfd0.svg\" width=\"16\" height=\"17\"\/>, \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043d\u0430<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/889\/76a\/6a9\/88976a6a9d8852722e71eb59cc39347a.svg\" width=\"12\" height=\"12\"\/>\u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e. \u0414\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u043c\u0430\u0442\u0440\u0438\u0446\u0430<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}\" alt=\"\\mathcal{F}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/150\/796\/3c2\/1507963c200b03cee6a185050551fe07.svg\" width=\"16\" height=\"17\"\/>\u2014 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%BD%D0%B8%D1%82%D0%B0%D1%80%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0443\u043d\u0438\u0442\u0430\u0440\u043d\u0430\u044f<\/a>, \u0441 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u043d\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}^{-1} = \\frac{1}{n}\\mathcal{F}^* = \\frac{1}{n}\\overline{\\mathcal{F}^\\text{T}}\" alt=\"\\mathcal{F}^{-1} = \\frac{1}{n}\\mathcal{F}^* = \\frac{1}{n}\\overline{\\mathcal{F}^\\text{T}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fd6\/caa\/cc7\/fd6caacc7ddeb3fa4ee337f105a7ec0a.svg\" width=\"182\" height=\"43\"\/><\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u043e\u0438\u0441\u0442\u0438\u043d\u0443 \u0443\u043d\u0438\u0442\u0430\u0440\u043d\u043e\u0439. \u0420\u0430\u0441\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align} &amp; X = \\sum_p x_p n \\overline{f}_p\\\\ &amp; X_q = \\sum_p x_p n \\overline{f}_{p,q} = \\sum_p x_p \\omega^{pq} = n(x\\cdot f_q)\\end{align}\" alt=\"\\begin{align} &amp; X = \\sum_p x_p n \\overline{f}_p\\\\ &amp; X_q = \\sum_p x_p n \\overline{f}_{p,q} = \\sum_p x_p \\omega^{pq} = n(x\\cdot f_q)\\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/269\/5c6\/bf5\/2695c6bf5680003d26bb41e754beb1e3.svg\" width=\"348\" height=\"98\"\/><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(a\\cdot b)\" alt=\"(a\\cdot b)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/156\/7b8\/210\/1567b821045233f6adb31fbfa1ca2ed8.svg\" width=\"47\" height=\"22\"\/>\u2014 \u044d\u0442\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0440\u0430\u0432\u043d\u043e\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\sum_i{a_i\\overline{b}_i}\" alt=\"\\sum_i{a_i\\overline{b}_i}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/877\/39b\/deb\/87739bdeb3ec980ae23af12ad9b36089.svg\" width=\"64\" height=\"46\"\/><\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u043c \u043e\u0431\u044f\u0437\u0430\u043d \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e-\u0441\u043e\u043f\u0440\u044f\u0436\u0451\u043d\u043d\u044b\u0439, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0435. \u0415\u0441\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u043a\u0443\u0447\u0443, \u0442\u043e \u0432\u044b\u0439\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"x=\\sum_q{n(x\\cdot f_q) f_q}\" alt=\"x=\\sum_q{n(x\\cdot f_q) f_q}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/246\/a9a\/38f\/246a9a38f6bf2868c12daf67563e872d.svg\" width=\"155\" height=\"46\"\/><\/p>\n<p>\u0410 \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0431\u0430\u0437\u0438\u0441\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"x = \\sum_q{\\frac{(x\\cdot f_q) f_q}{(f_q\\cdot f_q)}} = \\sum_q{\\frac{(x\\cdot f_q) f_q}{{\\lvert f_q\\rvert}^2}}\" alt=\"x = \\sum_q{\\frac{(x\\cdot f_q) f_q}{(f_q\\cdot f_q)}} = \\sum_q{\\frac{(x\\cdot f_q) f_q}{{\\lvert f_q\\rvert}^2}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f41\/43a\/5b7\/f4143a5b7fda00a58ff80d6c6c40d974.svg\" width=\"289\" height=\"57\"\/><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(f_p \\cdot f_q) = 0 \\Leftrightarrow p \\neq q\" alt=\"(f_p \\cdot f_q) = 0 \\Leftrightarrow p \\neq q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d18\/977\/da2\/d18977da2b4137b97ee0f7b46bde6d9f.svg\" width=\"178\" height=\"23\"\/>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0441\u0443\u043c\u043c\u044b \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u0438.<\/p>\n<h2>\u0422\u0435\u043e\u0440\u0435\u043c\u0430 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435<\/h2>\n<p>\u0421\u0432\u0451\u0440\u0442\u043a\u0430 \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0438\u0437 2-\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 3-\u0439.<br \/>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ast\" alt=\"\\ast\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae2\/288\/8ba\/ae22888ba6cac8b3c6b1b1023b93747c.svg\" width=\"10\" height=\"11\"\/>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align} &amp;c = a \\ast b\\\\ &amp;c_k = \\sum_{q}{a_q b_{(k-q)\\pmod{n}}} \\end{align}\" alt=\"\\begin{align} &amp;c = a \\ast b\\\\ &amp;c_k = \\sum_{q}{a_q b_{(k-q)\\pmod{n}}} \\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/693\/53c\/c4b\/69353cc4b579df7e4466bc88318f279f.svg\" width=\"204\" height=\"71\"\/><\/p>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0441\u0430\u043c\u0438\u043c DFT, \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0446\u0435\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0437\u0430\u0447\u0435\u043c \u0441\u0432\u0451\u0440\u0442\u043a\u0430 \u043d\u0443\u0436\u043d\u0430. \u041c\u0435\u043d\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0435\u0451 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u041e\u0434\u043d\u043e \u0438\u0437 \u043d\u0438\u0445 \u2014 \u044d\u0442\u043e \u0442\u043e, \u043a\u0430\u043a \u0441\u0432\u0451\u0440\u0442\u043a\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 DFT:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}(a \\ast b)_p = (\\mathcal{F}a)_p \\cdot (\\mathcal{F}b)_p\" alt=\"\\mathcal{F}(a \\ast b)_p = (\\mathcal{F}a)_p \\cdot (\\mathcal{F}b)_p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ac1\/95e\/95d\/ac195e95d738fc3e3c9de6fe42053adb.svg\" width=\"214\" height=\"23\"\/><\/p>\n<p>\u0414\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0432\u0451\u0440\u0442\u043a\u0443 \u0432 \u043f\u043e\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0442\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0410\u0434\u0430\u043c\u0430\u0440\u0430:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}(a \\ast b) = (\\mathcal{F}a)\\circ(\\mathcal{F}b)\" alt=\"\\mathcal{F}(a \\ast b) = (\\mathcal{F}a)\\circ(\\mathcal{F}b)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/70e\/485\/897\/70e485897c510a406f29ae73c7d12a7e.svg\" width=\"192\" height=\"22\"\/><\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u044f\u043c\u043e\u0433\u043e DFT, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e DFT. \u0418 \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f DFT \u0435\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0424\u0443\u0440\u044c\u0435 (FFT).<\/p>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c \u043c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043e\u0431\u0435\u0449\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"c_k=\\sum_{p+q\\equiv k\\pmod{n}}a_p b_q\" alt=\"c_k=\\sum_{p+q\\equiv k\\pmod{n}}a_p b_q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/510\/63f\/791\/51063f7917fd3daace7a974bb2d7f527.svg\" width=\"184\" height=\"49\"\/><\/p>\n<p>\u041c\u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439. \u0411\u043e\u043b\u0435\u0435 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e, \u0447\u0442\u043e \u043b\u0438. \u041f\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0424\u0443\u0440\u044c\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}(a \\ast b) = \\sum_{k}c_k\\mathcal{F}_k = \\sum_{k}(\\sum_{p+q\\equiv k\\pmod{n}}a_p b_q)\\mathcal{F}_k\" alt=\"\\mathcal{F}(a \\ast b) = \\sum_{k}c_k\\mathcal{F}_k = \\sum_{k}(\\sum_{p+q\\equiv k\\pmod{n}}a_p b_q)\\mathcal{F}_k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/331\/b80\/85e\/331b8085ed607b1feea157ea2afde161.svg\" width=\"397\" height=\"49\"\/><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}_k\" alt=\"\\mathcal{F}_k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/95d\/f16\/8df\/95df168df38e60dd8ef4cad913003fbd.svg\" width=\"23\" height=\"20\"\/>\u2014 \u044d\u0442\u043e <em>k<\/em>-\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}\" alt=\"\\mathcal{F}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0b6\/cb7\/0e0\/0b6cb70e0ddc21c12f9d7a01f55745f5.svg\" width=\"16\" height=\"17\"\/>(\u0438\u043b\u0438 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u2014 \u044d\u0442\u043e \u043d\u0435\u0432\u0430\u0436\u043d\u043e, \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0430\u044f).<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}(a \\ast b)_s = \\sum_{k}(\\sum_{p+q\\equiv k\\pmod{n}}a_p b_q)\\mathcal{F}_{k,s} = \\sum_{p}\\sum_{q}{a_p b_q \\mathcal{F}_{(p+q)\\pmod{n}, s}}\" alt=\"\\mathcal{F}(a \\ast b)_s = \\sum_{k}(\\sum_{p+q\\equiv k\\pmod{n}}a_p b_q)\\mathcal{F}_{k,s} = \\sum_{p}\\sum_{q}{a_p b_q \\mathcal{F}_{(p+q)\\pmod{n}, s}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/84c\/e9c\/c91\/84ce9cc91ef588f175960fe9fef53118.svg\" width=\"562\" height=\"49\"\/><\/p>\n<p>\u0412 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0432\u044b\u0448\u0435 \u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u0437\u0430\u043c\u0435\u043d\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u043d\u0430 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>\u041a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0410\u0434\u0430\u043c\u0430\u0440\u0430, \u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u0432 \u0442\u0435\u043e\u0440\u0435\u043c\u0435 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435?<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"(\\mathcal{F}a)_s\\cdot(\\mathcal{F}b)_s = (\\sum_{p}a_p\\mathcal{F}_{p,s})(\\sum_{q}b_q\\mathcal{F}_{q,s}) = \\sum_{p}\\sum_{q}{a_p b_q \\mathcal{F}_{p, s}\\mathcal{F}_{q, s}}\" alt=\"(\\mathcal{F}a)_s\\cdot(\\mathcal{F}b)_s = (\\sum_{p}a_p\\mathcal{F}_{p,s})(\\sum_{q}b_q\\mathcal{F}_{q,s}) = \\sum_{p}\\sum_{q}{a_p b_q \\mathcal{F}_{p, s}\\mathcal{F}_{q, s}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e70\/1ba\/8cb\/e701ba8cbc235ea561081b1635b264b9.svg\" width=\"518\" height=\"46\"\/><\/p>\n<p>\u041e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435. \u0412\u043e\u0442 \u0435\u0441\u043b\u0438 \u0431\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}_{(p+q)\\pmod{n}, s}\" alt=\"\\mathcal{F}_{(p+q)\\pmod{n}, s}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7df\/41f\/756\/7df41f75630cb316b475195354e023bc.svg\" width=\"121\" height=\"24\"\/> \u0440\u0430\u0432\u043d\u044f\u043b\u043e\u0441\u044c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}_{p, s}\\cdot \\mathcal{F}_{q, s}\" alt=\"\\mathcal{F}_{p, s}\\cdot \\mathcal{F}_{q, s}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b91\/c25\/6f0\/b91c256f0a9ce8315d86d5c5ff08cd01.svg\" width=\"79\" height=\"22\"\/>&#8230;<\/p>\n<p>\u0425\u043e\u0442\u044f \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u043e\u043d\u043e \u0438 \u0440\u0430\u0432\u043d\u044f\u0435\u0442\u0441\u044f, \u0432\u0435\u0434\u044c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}_{p,s}=\\omega^{ps}\" alt=\"\\mathcal{F}_{p,s}=\\omega^{ps}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f8\/58c\/7b4\/5f858c7b426e470493be15fbabc556e4.svg\" width=\"86\" height=\"23\"\/>,<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega^n=1\" alt=\"\\omega^n=1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0be\/4c3\/305\/0be4c330545715708ce0bdb79c81ec34.svg\" width=\"57\" height=\"18\"\/>\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0448\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}_{(p+q)\\pmod{n}, s}=\\omega^{((p+q)\\pmod{n})s}=\\omega^{(p+q)s}=\\omega^{ps}\\cdot\\omega^{qs}=\\mathcal{F}_{p, s}\\cdot \\mathcal{F}_{q, s}\" alt=\"\\mathcal{F}_{(p+q)\\pmod{n}, s}=\\omega^{((p+q)\\pmod{n})s}=\\omega^{(p+q)s}=\\omega^{ps}\\cdot\\omega^{qs}=\\mathcal{F}_{p, s}\\cdot \\mathcal{F}_{q, s}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/491\/f9c\/701\/491f9c7014c6109e7c8bf89ef6ab01f5.svg\" width=\"551\" height=\"29\"\/><\/p>\n<p>\u0412\u043e\u0442 \u043e\u043d\u043e, \u0442\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}\" alt=\"\\mathcal{F}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1d5\/7bb\/c49\/1d57bbc49913fca14ac825bd232cea5f.svg\" width=\"16\" height=\"17\"\/>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u0435\u043e\u0440\u0435\u043c\u0435 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c! \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0441 \u0442\u0435\u043c \u0436\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0442\u043e \u0442\u0435\u043e\u0440\u0435\u043c\u0430 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0438 \u0434\u043b\u044f \u043d\u0435\u0451.<\/p>\n<p>\u041e\u0442\u0441\u044e\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}_{p, s} = \\mathcal{F}_{0, s} \\cdot \\mathcal{F}_{p, s} \\Rightarrow \\mathcal{F}_{0, s} = 1\\\\ \\mathcal{F}_{p, s} = \\mathcal{F}_{1, s} \\cdot \\mathcal{F}_{p-1, s} \\Rightarrow \\mathcal{F}_{p, s} = \\mathcal{F}_{1, s}^{p}\" alt=\"\\mathcal{F}_{p, s} = \\mathcal{F}_{0, s} \\cdot \\mathcal{F}_{p, s} \\Rightarrow \\mathcal{F}_{0, s} = 1\\\\ \\mathcal{F}_{p, s} = \\mathcal{F}_{1, s} \\cdot \\mathcal{F}_{p-1, s} \\Rightarrow \\mathcal{F}_{p, s} = \\mathcal{F}_{1, s}^{p}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/28b\/68a\/170\/28b68a1700bda95a441fb5bfbd3c5da5.svg\" width=\"697\" height=\"55\"\/><\/p>\n<p>\u0421\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0442\u043e\u0436\u0435 \u0432\u0435\u0440\u043d\u044b. \u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0434\u043b\u044f DFT \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}_{1, 1}\" alt=\"\\mathcal{F}_{1, 1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/02b\/d96\/e08\/02bd96e089d518090d1759cb0e4a0eb6.svg\" width=\"33\" height=\"22\"\/>: <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}_{p, q} = \\mathcal{F}_{1, 1}^{pq}\" alt=\"\\mathcal{F}_{p, q} = \\mathcal{F}_{1, 1}^{pq}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b26\/0b5\/749\/b260b57490bca329b51ba1a8fd0de859.svg\" width=\"93\" height=\"27\"\/>, \u0438\u043d\u0430\u0447\u0435 \u0442\u0435\u043e\u0440\u0435\u043c\u0430 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f.<\/p>\n<h2>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430<\/h2>\n<p>WHT \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043d\u044b\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435.<\/p>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430 \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/36d\/4b5\/36e\/36d4b536e811dd45c94c0f9a6552efaf.svg\" width=\"12\" height=\"12\"\/>\u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438 \u0442\u043e\u0436\u0435 \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440, \u043d\u043e \u043f\u0440\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445 \u043d\u0430<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/36d\/4b5\/36e\/36d4b536e811dd45c94c0f9a6552efaf.svg\" width=\"12\" height=\"12\"\/>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"n = 2^m, m \\in \\mathbb{N}\" alt=\"n = 2^m, m \\in \\mathbb{N}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/99e\/c00\/b22\/99ec00b22bc03ca4ac13f71a36b5bf02.svg\" width=\"126\" height=\"21\"\/><\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/36d\/4b5\/36e\/36d4b536e811dd45c94c0f9a6552efaf.svg\" width=\"12\" height=\"12\"\/>\u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u0445 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043f\u0435\u043d\u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"m\" alt=\"m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/24c\/2f2\/4a1\/24c2f24a10a6525d36757bca5f3cd233.svg\" width=\"17\" height=\"12\"\/>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"X = H_mx\\\\ x = H_m^{-1}X\" alt=\"X = H_mx\\\\ x = H_m^{-1}X\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b9\/16c\/c45\/3b916cc45c5a5d1ab7eff8952afdd9d7.svg\" width=\"697\" height=\"48\"\/><\/p>\n<p>\u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u0410\u0434\u0430\u043c\u0430\u0440\u0430, \u0432\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0440\u0435\u043d\u0442\u043d\u043e, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u044f<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"m=1\" alt=\"m=1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/84b\/c07\/587\/84bc075873be082ed299cfe06ce94078.svg\" width=\"52\" height=\"16\"\/>(0 \u044f \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043a\u0443\u0447\u043d\u043e). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e DFT. \u041c\u0430\u0442\u0440\u0438\u0446\u044b \u0431\u041e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0438\u0437 \u043c\u0430\u0442\u0440\u0438\u0446 \u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align}&amp;H_1=\\mathcal{F}=\\begin{pmatrix}1&amp;1\\\\1&amp;-1\\end{pmatrix}\\\\ &amp;H_m=\\begin{pmatrix}H_{m-1}&amp;H_{m-1}\\\\H_{m-1}&amp;-H_{m-1}\\end{pmatrix}\\end{align}\" alt=\"\\begin{align}&amp;H_1=\\mathcal{F}=\\begin{pmatrix}1&amp;1\\\\1&amp;-1\\end{pmatrix}\\\\ &amp;H_m=\\begin{pmatrix}H_{m-1}&amp;H_{m-1}\\\\H_{m-1}&amp;-H_{m-1}\\end{pmatrix}\\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3e2\/654\/bb1\/3e2654bb1746229bd92253b682815dfa.svg\" width=\"225\" height=\"102\"\/><\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"H_2 = \\begin{pmatrix} \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 \\\\ \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 \\\\\\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 \\\\\\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1\\end{pmatrix}\\\\ H_3 = \\begin{pmatrix} \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 \\\\ \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1\\\\ \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1\\\\ \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 \\\\ \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; -1 &amp; -1 \\\\ \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1\\\\ \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; \\phantom{-}1\\\\ \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 \\\\ \\end{pmatrix}\" alt=\"H_2 = \\begin{pmatrix} \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 \\\\ \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 \\\\\\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 \\\\\\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1\\end{pmatrix}\\\\ H_3 = \\begin{pmatrix} \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 \\\\ \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1\\\\ \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1\\\\ \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 \\\\ \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; -1 &amp; -1 \\\\ \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1\\\\ \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 &amp; -1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; \\phantom{-}1\\\\ \\phantom{-}1 &amp; -1 &amp; -1 &amp; \\phantom{-}1 &amp; -1 &amp; \\phantom{-}1 &amp; \\phantom{-}1 &amp; -1 \\\\ \\end{pmatrix}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e2d\/9db\/f23\/e2d9dbf23f61d60b216f7bcf9f181c8f.svg\" width=\"697\" height=\"319\"\/><\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441\u043e \u0441\u0445\u043e\u0434\u0441\u0442\u0432 \u0441 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0424\u0443\u0440\u044c\u0435. \u041c\u0430\u0442\u0440\u0438\u0446\u0430<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"H\" alt=\"H\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4f0\/dee\/ad8\/4f0deead864dd9dcd1b74b67ac9faf9d.svg\" width=\"17\" height=\"17\"\/>&#8212; \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f, \u0442.\u0435. \u0442\u043e\u0436\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0437\u0438\u0441, \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0434\u043b\u044f DFT:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"H^{-1} = \\frac{1}{2^m}H^*\" alt=\"H^{-1} = \\frac{1}{2^m}H^*\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7df\/32d\/910\/7df32d9109dae820947a7173344d80ba.svg\" width=\"121\" height=\"43\"\/><\/p>\n<p>\u0417\u043d\u0430\u043a * \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0432\u044b\u0448\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0430\u044f \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f. \u0414\u043b\u044f WHT \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043e\u0440\u0435\u043c\u0430 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"H_{(p + q)\\pmod{n}, s} \\neq H_{p, s} \\cdot H_{q, s}\" alt=\"H_{(p + q)\\pmod{n}, s} \\neq H_{p, s} \\cdot H_{q, s}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/919\/a08\/33d\/919a0833da203547f096b5257aabb7bc.svg\" width=\"232\" height=\"24\"\/>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 WHT \u2014 \u044d\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0433\u043e DFT, \u0442\u043e \u0438 \u0435\u0433\u043e \u0442\u0435\u043e\u0440\u0435\u043c\u0430 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435 \u0434\u043b\u044f DFT. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0438\u0439\u0442\u0438 \u043a \u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u00ab\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u00bb, \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e\u00a0\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u043d\u044f\u044e\u0442 \u0437\u043d\u0430\u043a, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u0430\u0432\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u043f\u043e\u0434\u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u00ab\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u043f\u0443\u0441\u043a\u0430\u00bb. \u0415\u0441\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u043a, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043a\u0430\u043a<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"-1^{count}\" alt=\"-1^{count}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/204\/c95\/628\/204c95628f726618e90890fbbfcfb797.svg\" width=\"60\" height=\"21\"\/>.<\/p>\n<p>\u0414\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b 2 \u043d\u0430 2 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c,<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"H_{p, q} = -1^{pq}, p \\in \\{0, 1\\}, q \\in \\{0, 1\\}\" alt=\"H_{p, q} = -1^{pq}, p \\in \\{0, 1\\}, q \\in \\{0, 1\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b66\/e19\/711\/b66e19711668f26a327e6a0f04839c9d.svg\" width=\"277\" height=\"23\"\/>. \u0427\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"H_m = \\begin{pmatrix}H_{m-1}&amp;H_{m-1}\\\\H_{m-1}&amp;-H_{m-1}\\end{pmatrix}\" alt=\"H_m = \\begin{pmatrix}H_{m-1}&amp;H_{m-1}\\\\H_{m-1}&amp;-H_{m-1}\\end{pmatrix}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f1f\/5cf\/50e\/f1f5cf50e2424dec26f5f6fd7bce07fe.svg\" width=\"219\" height=\"50\"\/><\/p>\n<p>\u0412\u0441\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u0438\u0431\u043e \u0440\u0430\u0432\u043d\u044b 2<sup>m-1<\/sup>, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u0441\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u0438\u0431\u043e \u0440\u0430\u0432\u043d\u044b 2<sup>m-1<\/sup>. \u0422\u0430\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438\u043c\u0435\u044e\u0442 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0431\u0438\u0442 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"m-1\" alt=\"m-1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b2e\/48d\/b81\/b2e48db8174b019713cbda3b664e43af.svg\" width=\"50\" height=\"17\"\/>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0440\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u043c \u0441\u043f\u0443\u0441\u043a\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0430<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"-1^{bit_{m-1}(p) \\cdot bit_{m-1}(q)}\" alt=\"-1^{bit_{m-1}(p) \\cdot bit_{m-1}(q)}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aea\/710\/d4d\/aea710d4d0fb7c4fb7c9c7c8b5d9f446.svg\" width=\"140\" height=\"23\"\/> (\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 2 \u043d\u0430 2).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u044d\u0442\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0438\u0442\u043e\u0432 \u0447\u0438\u0441\u0435\u043b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"p\" alt=\"p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a0b\/8ab\/cb3\/a0b8abcb3d32568c8f016c4a97fbf8f7.svg\" width=\"10\" height=\"15\"\/>\u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"q\" alt=\"q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e1\/f4b\/bb7\/9e1f4bbb75c37ce6081fd58013377b0f.svg\" width=\"9\" height=\"15\"\/>, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"H_{p, q} = -1^{bit\\_count(p \\wedge q)}\" alt=\"H_{p, q} = -1^{bit\\_count(p \\wedge q)}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2f1\/1a4\/8d4\/2f11a48d4cefe05d5d7dff351626138a.svg\" width=\"176\" height=\"27\"\/><\/p>\n<p>\u0422\u0443\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 <code>&amp;<\/code> \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u044f, \u0430 <code>^<\/code> \u2014 \u044d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 \u0438\u043b\u0438. \u0412 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\wedge\" alt=\"\\wedge\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/226\/b5e\/6ba\/226b5e6badbda8a4fee64dcf6336de3e.svg\" width=\"13\" height=\"15\"\/> \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u044f, \u0430 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\oplus\" alt=\"\\oplus\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e5d\/589\/2d9\/e5d5892d980aa665d5a4c1634ca48f69.svg\" width=\"15\" height=\"16\"\/> \u2014 \u044d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 \u0438\u043b\u0438. \u041f\u043e\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"p \\wedge q\" alt=\"p \\wedge q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c7\/462\/a51\/4c7462a5177cf8f5c4c88f54b78092ad.svg\" width=\"41\" height=\"18\"\/> \u044f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u044e. \u0410 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"bit\\_count(p \\wedge q)\" alt=\"bit\\_count(p \\wedge q)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50d\/ee3\/eef\/50dee3eef42c90b51ac9d2c0d931bfc2.svg\" width=\"134\" height=\"22\"\/> \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0432\u043d\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044e<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"p\" alt=\"p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a0b\/8ab\/cb3\/a0b8abcb3d32568c8f016c4a97fbf8f7.svg\" width=\"10\" height=\"15\"\/>\u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"q\" alt=\"q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e1\/f4b\/bb7\/9e1f4bbb75c37ce6081fd58013377b0f.svg\" width=\"9\" height=\"15\"\/>, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0441\u0435\u0431\u0435 \u043a\u0430\u043a \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p>\u041c\u044b \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"H\" alt=\"H\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6a7\/a34\/951\/6a7a34951e12378cfb3f6bc6a207d795.svg\" width=\"17\" height=\"17\"\/>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044b<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{F}\" alt=\"\\mathcal{F}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/493\/85a\/46d\/49385a46d90f34a7d31917fc6786773b.svg\" width=\"16\" height=\"17\"\/>.<\/p>\n<h2>\u0421\u0432\u0451\u0440\u0442\u043a\u0430 \u0434\u043b\u044f WHT<\/h2>\n<p>\u041a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u044f \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432\u00a0\u2014 \u044d\u0442\u043e \u0438\u0445 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u0410\u00a0\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 \u0438\u043b\u0438\u00a0\u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432\u00a0\u2014 \u044d\u0442\u043e \u0438\u0445 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e 2. \u042d\u0442\u0438 2 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043e\u0447\u0435\u043d\u044c \u0441\u0445\u043e\u0436\u0435 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"(p \\oplus q)\\wedge s = (p \\wedge s) \\oplus (q \\wedge s)\" alt=\"(p \\oplus q)\\wedge s = (p \\wedge s) \\oplus (q \\wedge s)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b48\/1a4\/947\/b481a49475482f3cae1278ff7f5aeed7.svg\" width=\"246\" height=\"22\"\/><\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"bit\\_count(p\\oplus q) \\equiv (bit\\_count(p)+bit\\_count(q))\\pmod{2}\" alt=\"bit\\_count(p\\oplus q) \\equiv (bit\\_count(p)+bit\\_count(q))\\pmod{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/542\/cf4\/a22\/542cf4a22583b79b9f05ceb351351ea7.svg\" width=\"497\" height=\"22\"\/><\/p>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u044d\u0442\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"H_{p\\oplus q, s} = -1^{bit\\_count((p \\oplus q)\\wedge s)} = -1^{bit\\_count(p\\wedge s)} \\cdot -1^{bit\\_count(q\\wedge s)} = H_{p, q}\\cdot H_{q, s}\" alt=\"H_{p\\oplus q, s} = -1^{bit\\_count((p \\oplus q)\\wedge s)} = -1^{bit\\_count(p\\wedge s)} \\cdot -1^{bit\\_count(q\\wedge s)} = H_{p, q}\\cdot H_{q, s}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0d6\/3b4\/fe4\/0d63b4fe4ec987230a274fd5085e4f22.svg\" width=\"610\" height=\"27\"\/><\/p>\n<p>\u041a\u0430\u043a \u043f\u043e\u043c\u043d\u0438\u043c, \u0434\u043b\u044f DFT \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043c \u0431\u044b\u043b\u043e \u0434\u0440\u0443\u0433\u043e\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\mathcal{F}_{(p+q)\\pmod{n}, s} = \\mathcal{F}_{p, s} \\cdot \\mathcal{F}_{q, s}\" alt=\"\\mathcal{F}_{(p+q)\\pmod{n}, s} = \\mathcal{F}_{p, s} \\cdot \\mathcal{F}_{q, s}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b1\/795\/9f2\/5b17959f2e8de593b01ccc3aba0eca6a.svg\" width=\"225\" height=\"24\"\/><\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435, \u0433\u0434\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0434\u043b\u044f \u0441\u0432\u0451\u0440\u0442\u043a\u0438<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"c = a \\ast b\" alt=\"c = a \\ast b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/87a\/cd1\/c02\/87acd1c024158e5b9899973a4dfabd98.svg\" width=\"71\" height=\"17\"\/>\u0431\u044b\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align} &amp; (\\mathcal{F}c)_k = (\\mathcal{F}a)_k \\cdot (\\mathcal{F}b)_k\\\\ &amp;c_k = \\sum_{p+q\\equiv k\\pmod{n}}{a_p b_q}\\end{align}\" alt=\"\\begin{align} &amp; (\\mathcal{F}c)_k = (\\mathcal{F}a)_k \\cdot (\\mathcal{F}b)_k\\\\ &amp;c_k = \\sum_{p+q\\equiv k\\pmod{n}}{a_p b_q}\\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d6\/31e\/c0c\/8d631ec0c2c551275a3f8f7754e6cec2.svg\" width=\"193\" height=\"75\"\/><\/p>\n<p>\u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0435\u043e\u0440\u0435\u043c\u0443 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align} &amp; (Hc)_k = (Ha)_k \\cdot (Hb)_k \\\\ &amp; c_k = \\sum_{p \\oplus q = k}{a_p b_q}\\end{align}\" alt=\"\\begin{align} &amp; (Hc)_k = (Ha)_k \\cdot (Hb)_k \\\\ &amp; c_k = \\sum_{p \\oplus q = k}{a_p b_q}\\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/73f\/72f\/0b3\/73f72f0b3a4f9a283921cef696a7ea73.svg\" width=\"196\" height=\"73\"\/><\/p>\n<p>\u0422\u0435\u043e\u0440\u0435\u043c\u0430 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 \u043d\u0435\u0439 \u043d\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"+\\pmod{n}\" alt=\"+\\pmod{n}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/355\/305\/627\/355305627c0d6fa764304896cbf0fd85.svg\" width=\"107\" height=\"22\"\/>, \u0430 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\oplus\" alt=\"\\oplus\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/365\/896\/f42\/365896f424793aee568c502b6ff130ff.svg\" width=\"15\" height=\"16\"\/>. \u0418 \u044d\u0442\u043e \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>convolute<\/code>.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\oplus\" alt=\"\\oplus\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/365\/896\/f42\/365896f424793aee568c502b6ff130ff.svg\" width=\"15\" height=\"16\"\/>\u0438\u043b\u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0424\u0443\u0440\u044c\u0435. \u0418\u0445, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e.<\/p>\n<h2>\u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"H(a \\ast b) = (Ha)\\circ(Hb)\" alt=\"H(a \\ast b) = (Ha)\\circ(Hb)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/277\/d3b\/fe6\/277d3bfe6eab3a68fef7d5428e0dc826.svg\" width=\"195\" height=\"22\"\/><\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u0432\u0451\u0440\u0442\u043a\u0443 \u0434\u0432\u0443\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0442\u0435\u043e\u0440\u0435\u043c\u043e\u0439 \u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0435, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 WHT \u043d\u0430\u0434 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0410\u0434\u0430\u043c\u0430\u0440\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u0447\u0430\u0441\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443:<\/p>\n<pre><code class=\"java\">static final int M = 65536;  static void convolute(long[] C) {     wht(C);      for (int i = 0; i &lt; M; i++) {         C[i] *= C[i];     }      wht(C);      for (int i = 0; i &lt; M; i++) {         C[i] \/= M;     } }<\/code><\/pre>\n<p>\u041f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"H_m^{-1} = \\frac{1}{2^m}H_m\" alt=\"H_m^{-1} = \\frac{1}{2^m}H_m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/823\/cae\/74d\/823cae74d01419ae2cd3faf92f20c2a4.svg\" width=\"123\" height=\"42\"\/>. \u041e\u0442\u0441\u044e\u0434\u0430 \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>\u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c &#8212; \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>wht<\/code>:<\/p>\n<pre><code class=\"java\">static void wht(long[] C) {     for (int h = 1; h &lt; M; h *= 2) {         for (int i = 0; i &lt; M; i += (h * 2)) {             for (int j = 0; j &lt; h; j++) {                 long x = C[i + j],                      y = C[i + j + h];                  C[i + j]     = x + y;                 C[i + j + h] = x - y;             }         }     } }<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u043e\u0432\u0441\u044e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043c\u0430\u0442\u0440\u0438\u0446 \u0410\u0434\u0430\u043c\u0430\u0440\u0430, \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044f \u0440\u0435\u043a\u0443\u0440\u0440\u0435\u043d\u0442\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438. \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0446\u0438\u043a\u043b \u2014 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439, \u0430 2 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0446\u0438\u043a\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u044d\u0442\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0425\u043e\u0440\u043e\u0448\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0421\u043b\u043e\u0436\u043d\u0430\u044f. \u0417\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435? \u0422\u043e, \u0447\u0442\u043e \u044f \u0432\u0430\u0441 \u043e\u0431\u043c\u0430\u043d\u0443\u043b. \u041d\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435.<\/p>\n<p>\u0411\u043b\u0438\u0436\u0435 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0447\u0442\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <code>B<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 5*10<sup>9<\/sup> \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0438 \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430. \u0410 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0431\u044b \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <code>C<\/code>, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u043b\u0438 \u0441\u0432\u0451\u0440\u0442\u043a\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e?<br \/>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 2*10<sup>9<\/sup>, \u0435\u0441\u043b\u0438 \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f <code>j >= i<\/code>, \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432 2 \u0441 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435. \u0414\u043b\u044f Java \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 &#8212; 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043a\u0430\u0442\u0438\u0442?<\/p>\n<pre><code class=\"java\">public static void main(String[] args) {     int N = readUnsignedInt();      int B[] = new int[N + 1];     for (int i = 0; i &lt; N; i++) {         B[i + 1] = B[i] ^ readUnsignedInt();     }      int C[] = new int[M];     for (int i = 0; i &lt;= N; i++) {         ++C[B[i]];     }      int tmp[] = C;     C = new int[M];     for (int i = 0; i &lt; M; i++) {         for (int j = i; j &lt; M; j++) {             C[i ^ j] += tmp[i] * tmp[j];         }     }      C[0] = (C[0] - N - 1) \/ 2;      int max = Integer.MIN_VALUE, imax = 0;     for (int i = 0; i &lt; M; i++) {         if (C[i] > max) {             max = C[i];             imax = i;         }     }     System.out.print(imax);     System.out.print(' ');     System.out.println(max); }<\/code><\/pre>\n<p>\u041f\u0440\u043e\u043a\u0430\u0442\u0438\u043b\u043e!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e45\/007\/c9d\/e45007c9d8e2867fb3a64b0c50cde819.png\" width=\"1336\" height=\"176\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e45\/007\/c9d\/e45007c9d8e2867fb3a64b0c50cde819.png\"\/><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438 \u0431\u0435\u0437 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430. \u0422.\u0435. \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0441\u043c\u043e\u0433 \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u043f\u043e\u0434\u0433\u043b\u044f\u0434\u0435\u043b \u043e\u0442\u0432\u0435\u0442, \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c c WHT. \u041e\u043d \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u043f\u043e\u043b\u0435\u043d\u0438\u043b\u0441\u044f \u043f\u043e\u0434\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u0434 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u044b\u0434\u043d\u043e.<\/p>\n<p>\u0410 \u0432\u0435\u0434\u044c \u0430\u0432\u0442\u043e\u0440 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0433 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0431\u044b \u0432\u043c\u0435\u0441\u0442\u043e 16-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, 17-\u0431\u0438\u0442\u043d\u044b\u0435. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c \u0444\u0430\u043a\u0442\u043e\u043c, \u0447\u0442\u043e \u0432 <em>Editorial<\/em> \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0435\u0440\u0443\u043d\u0434\u0430, \u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u0437\u0430\u0434\u0430\u0447\u0438 &#8212; \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0430\u0432\u0442\u043e\u0440. \u041f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043e\u043d \u0441\u043f\u0451\u0440 \u0435\u0451 \u0441 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430, \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0432 \u043d\u0443\u0436\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u0438 \u043d\u0435 \u043f\u043e\u0434\u043e\u0433\u043d\u0430\u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u043e\u0434 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u043d\u0430 \u043d\u043e\u0432\u043e\u043c \u0441\u0430\u0439\u0442\u0435. \u0418\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u0445 \u043c\u043d\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u0438 \u043c\u044b\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u043e\u0439.<\/p>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0440\u0430\u0434, \u0447\u0442\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u0434\u0430 \u0438 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 \u043d\u0430 \u0434\u0435\u043b\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u0447\u0435\u043c \u044f \u0441\u0447\u0438\u0442\u0430\u043b \u0440\u0430\u043d\u0435\u0435.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/787890\/\"> https:\/\/habr.com\/ru\/articles\/787890\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 hackerrank.com \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f <a href=\"https:\/\/www.hackerrank.com\/challenges\/xor-subsequence\/problem\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0434\u0430\u0447\u0430<\/a>. \u041f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <code>short[] A;<\/code> \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, <code>xor<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c. \u0421\u0430\u043c \u044d\u0442\u043e\u0442 <code>xor<\/code> \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438.<\/p>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0430\u0432\u043d\u0430 10<sup>5<\/sup>, \u0442\u0430\u043a \u0447\u0442\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042f \u0432 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u0441 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0438 \u0441\u0434\u0430\u043b\u0441\u044f, \u0440\u0435\u0448\u0438\u0432 \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0418 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043f\u043e\u043d\u044f\u043b \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u2014 \u0430\u0432\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0440\u0435\u0448\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0447\u0435\u0440\u0435\u0437 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435.<\/p>\n<h2>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u043b\u0438 \u0435\u0451 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0417\u0430\u0434\u0430\u043d \u043c\u0430\u0441\u0441\u0438\u0432 <code>A<\/code> \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1 \u0434\u043e 65535 (\u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b). \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 . \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u0435 \u0435\u0433\u043e \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u044b:<\/p>\n<ul>\n<li>\n<\/li>\n<li>\n<\/li>\n<li>\n<\/li>\n<li>\n<\/li>\n<li>\n<\/li>\n<li>\n<\/li>\n<\/ul>\n<p>2 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043c\u0435\u044e\u0442 <code>xor<\/code> \u0440\u0430\u0432\u043d\u044b\u0439 1, \u0442\u0430\u043a \u0436\u0435 2 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043c\u0435\u044e\u0442 <code>xor<\/code> \u0440\u0430\u0432\u043d\u044b\u0439 3.<br \/>2\u00a0\u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0441\u00a0\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c <code>xor<\/code>\u2011\u043e\u043c. \u0421\u0430\u043c\u00a0\u0436\u0435 <code>xor<\/code> \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0440\u0430\u0432\u043d\u044b\u043c 1, \u043a\u0430\u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0432\u0441\u0435\u0445 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 (1\u00a0\u0438\u043b\u0438 3). \u0418\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438\u00a0\u2014 \u043f\u0430\u0440\u0430 .<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e 100000. \u0414\u043b\u0438\u043d\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043a\u0430\u043a <code>N<\/code>.<\/p>\n<h2>\u041d\u0430\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <code>B<\/code>, \u0441\u0442\u0440\u043e\u044f\u0449\u0438\u0439\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ul>\n<li>\n<p><code>B[0] = 0<\/code><\/p>\n<\/li>\n<li>\n<p><code>B[i] = B[i-1] ^ A[i-1]<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0430\u0441\u0441\u0438\u0432 <code>B<\/code> \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 <code>N+1<\/code>. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 <code>B[i]<\/code> (\u043f\u0440\u0438 <code>i > 0<\/code>) \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d <code>xor<\/code>-\u0443 \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 <code>A[k]<\/code> \u0434\u043b\u044f <code>0 &lt;= k &lt; i<\/code>. \u0414\u0430\u043d\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>xor<\/code> \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>[A[i], ..., A[j]]<\/code> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d <code>B[j+1] ^ B[i]<\/code>, \u0442.\u0435. \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0421\u0430\u043c \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0437\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0442\u043e\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c <code>xor<\/code> \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432. \u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (65536 \u2014 \u044d\u0442\u043e 2<sup>16<\/sup>):<\/p>\n<pre><code class=\"java\">int[] frequencies = new int[65536];  for (int i = 0; i &lt; N; i++) {     for (int j = i; j &lt; N; j++) {         ++frequencies[B[j + 1] ^ B[i]];     } }  int maxFrequency = max(frequencies); int xor = indexOf(frequencies, maxFrequency);<\/code><\/pre>\n<p>\u0422\u0440\u043e\u0439\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043c\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u043b\u0438, \u0430 \u0432\u043e\u0442 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043b\u0441\u044f, \u0438 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e. \u0412 \u043d\u0451\u043c \u0431\u0443\u0434\u0435\u0442  \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0447\u0442\u043e \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 5*10<sup>9<\/sup>.<\/p>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043c\u043a\u0438, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 (4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0434\u043b\u044f Java, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440).<\/p>\n<h2>\u041a\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0440<\/h2>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438 Editorial<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u043a \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432 <em>Editorial<\/em> \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432\u0435\u0440\u043d\u044b\u0439, \u0430 \u0432\u043e\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430 \u2014 \u043f\u043e\u043b\u043d\u0435\u0439\u0448\u0430\u044f \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0438\u0446\u0430, \u0441 \u043a\u043e\u0434\u043e\u043c \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0430\u044f.<br \/>\u0425\u043e\u0442\u044f \u0438 \u043a \u043a\u043e\u0434\u0443 \u0443 \u043c\u0435\u043d\u044f \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043d\u043e \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u0441\u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u0442\u0430\u043c <em>\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439<\/em>.<\/p>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u043c\u0435\u043b\u043e\u0441\u044c \u0432 \u0432\u0438\u0434\u0443, \u0430 \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e. \u0418 \u0441\u0434\u0435\u043b\u0430\u044e \u044d\u0442\u043e \u043d\u0435 \u0437\u0430 3 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u0418\u0434\u0435\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u0430\u043a\u0430\u044f:<\/p>\n<pre><code class=\"java\">long[] C = new long[65536];  for (int i = 0; i &lt;= N; i++) {     ++C[B[i]]; }  convolute(C); C[0] -= N + 1;  long maxFrequency = max(C) \/ 2; long xor = indexOf(C, maxFrequency * 2);<\/code><\/pre>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 2-\u0445 \u0447\u0430\u0441\u0442\u0435\u0439: \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>C<\/code><br \/>(\u0430 \u043d\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>B<\/code>, \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043e) \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e <code>C[0] -= N + 1<\/code>. \u041a \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0432\u044b\u0437\u043e\u0432\u0430 <code>max(C)<\/code> \u043c\u0430\u0441\u0441\u0438\u0432 <code>C<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 <code>frequencies<\/code> \u0432 \u043d\u0430\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 2.<\/p>\n<p>\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u043c\u0441\u044f \u043a \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u043e\u0434\u0443\u043c\u0430\u0432, \u043a\u0430\u043a \u043f\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <code>C<\/code> \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442. \u042d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u043b\u044e\u0447\u043e\u043c \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e.<br \/>\u0412 \u043d\u0430\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 <code>++frequencies[k]<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 <code>k == B[i] ^ B[j]<\/code>,<br \/>\u0433\u0434\u0435 <code>0 &lt;= i &lt; j &lt;= N<\/code> (\u0437\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u0437\u0430\u043c\u0435\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>j + 1 -> j<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0430\u0441\u043a\u0430\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 <code>+1<\/code>, \u0442\u0430\u043a \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u044b).<br \/>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>++<\/code> \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440 <code>(i, j)<\/code>, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <code>B[i] ^ B[j]<\/code> \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b \u0438 \u0440\u0430\u0432\u043d\u044b <code>k<\/code>. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0434\u043b\u044f \u0432\u0441\u0435\u0445 <code>i &lt; j<\/code> \u0438 <code>k == B[i] ^ B[j]<\/code> \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <code>frequencies[k]<\/code>.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0431\u044b\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0435 \u0437\u0430\u0434\u0430\u0447\u0438.<br \/><code>A = [1, 2, 3]<br \/>B = [0, 1, 3, 0] ([0, 0^1, 0^1^2, 0^1^2^3])<br \/>C = [2, 1, 0, 2, ...]<br \/><\/code>\u0414\u0430\u043b\u0435\u0435 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 \u043f\u0440\u0438 <code>1<\/code> \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u043c \u043f\u0430\u0440\u044b <code>(i, j)<\/code>:<\/p>\n<p>\u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0443\u0442\u043d\u043e\u0435. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 <code>i &lt; j<\/code>: \u0442\u0430\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u0432 \u0441\u0443\u043c\u043c\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442 \u0444\u043e\u0440\u043c\u0443\u043b\u0443. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<p>\u0412 \u043d\u0451\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a <code>i<\/code> \u0438 <code>j<\/code> \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0445 \u043f\u043e\u043b\u043d\u043e\u0435 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u044f\u0432\u043d\u043e:<\/p>\n<p>j,\\:b_i\\oplus b_j=k}1 + \\sum_{i=j,\\:b_i\\oplus b_j = k}1&#8243; alt=&#187;F_k^{&#8216;}=\\sum_{i&lt;j,\\:b_i\\oplus b_j=k}1 + \\sum_{i>j,\\:b_i\\oplus b_j=k}1 + \\sum_{i=j,\\:b_i\\oplus b_j = k}1&#8243; src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6e9\/f21\/133\/6e9f21133f6a237b4eaa468d75d23379.svg&#187; width=&#187;370&#8243; height=&#187;49&#8243;\/><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <code>k == 0<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 <code>k<\/code> \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (<code>xor<\/code> \u0440\u0430\u0432\u0435\u043d <code>0<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432). \u0410 \u0440\u0430\u0432\u043d\u044f\u0442\u044c\u0441\u044f \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 <code>i<\/code>, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f, \u0442.\u0435. \u0434\u043b\u0438\u043d\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>B<\/code>, \u043e\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 <code>N+1<\/code>. \u0414\u0430\u043b\u0435\u0435, \u0441\u0443\u043c\u043c\u044b \u0434\u043b\u044f <code>i&lt;j<\/code> \u0438 \u0434\u043b\u044f <code>i>j<\/code> \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e \u0440\u0430\u0432\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a <code>xor<\/code> \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u0438\u0432\u0435\u043d. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435, \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0432\u0438\u0434\u0435:<\/p>\n<p>\u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 .<br \/>\u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 <code>B[i]<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442? \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0435 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u043b\u0438, \u0447\u0442\u043e <code>B[i_1] == B[i_2] == ... == B[i_n]<\/code>, \u0442\u043e \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0441\u0435\u0445 <code>B[i_k] ^ B[j]<\/code> \u0431\u044b\u043b \u0431\u044b \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d, \u0442\u0430\u043a\u0438\u0445 \u043f\u0430\u0440 \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u043e\u0432\u043d\u043e <code>n<\/code> \u0448\u0442\u0443\u043a.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<br \/>\u0434\u043b\u044f \u0432\u0441\u0435\u0445 <code>i<\/code> \u0442\u0430\u043a\u0438\u0445, \u0447\u0442\u043e \u0432\u0441\u0435 <code>B[i]<\/code> \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b \u0438 <code>k == B[i] ^ B[j]<\/code>, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>count(B[i])<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u044c\u0448\u0435, \u043d\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0434\u0430 \u0438 <code>i<\/code> \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0432\u0441\u0435.<\/p>\n<p>\u0424\u0440\u0430\u0437\u0430 <em>b<sub>i<\/sub> is unique<\/em> \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430, \u043d\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043e\u043d\u0430 \u0434\u0430\u0451\u0442 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e. \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c <code>j<\/code>? \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0434\u043b\u044f \u0432\u0441\u0435\u0445  <code>i<\/code> \u0442\u0430\u043a\u0438\u0445, \u0447\u0442\u043e \u0432\u0441\u0435 <code>B[i]<\/code> \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b, \u0432\u0441\u0435\u0445  <code>j<\/code> \u0442\u0430\u043a\u0438\u0445, \u0447\u0442\u043e \u0432\u0441\u0435 <code>B[j]<\/code> \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b \u0438 <code>k == B[i] ^ B[j]<\/code>, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>count(B[i]) * count(B[j])<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c .<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043a\u043e\u0434 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 <code>C<\/code> \u0432 \u043d\u0451\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 <code>count<\/code>, \u0442.\u0435. <code>C[B[i]] == count(B[i])<\/code>. \u0414\u0430\u043b\u0435\u0435, <code>i<\/code> \u0438 <code>j<\/code> \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f, \u0441\u0434\u0435\u043b\u0430\u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>x<\/code> \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <code>B<\/code>, \u0442\u043e <code>C[x] == 0<\/code>. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>x<\/code> \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 <code>B<\/code>, \u0442\u043e \u043e\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 <code>C[x]<\/code> \u0440\u0430\u0437. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0435\u0433\u043e, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b:<\/p>\n<p>\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435, \u0438\u0437\u0431\u0430\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u0431\u0443\u043a\u0432\u044b <code>q<\/code>:<\/p>\n<p>\u0415\u0441\u043b\u0438 <code>p<\/code> \u0438\u043b\u0438 <code>q<\/code> \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <code>B<\/code>, \u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>count<\/code> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e \u0438 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>p<\/code> \u0438 <code>q<\/code> \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0432 <code>B<\/code>. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0442\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u0441\u0443\u043c\u043c\u0430.<\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0441\u0442\u0440\u043e\u043a\u0435 <code>convolute(C)<\/code>:<\/p>\n<pre><code class=\"java\">long[] tmp = new long[65536];  for (int p = 0; p &lt; 65536; p++) {     for (int q = 0; q &lt; 65536; q++) {         tmp[p ^ q] += C[p] * C[q];     } }  C = tmp;<\/code><\/pre>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u0451\u0440\u0442\u043a\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>C<\/code> \u0441 \u0441\u0430\u043c\u0438\u043c \u0441\u043e\u0431\u043e\u0439.<br \/>\u0422\u0430\u043a \u0436\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c <code>C[0] -= N + 1<\/code> \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 2, \u0438\u0437 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443\u0438.<\/p>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0432\u0451\u0440\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430 (FWHT), \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430 <code>O(M*log(M))<\/code> (\u0443 \u043d\u0430\u0441 <code>M = 65536<\/code>) \u0438 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043a\u0430\u043a \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0432\u0451\u0440\u0442\u043a\u0430 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u0430\u043a \u043e\u043d\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0434\u0430 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c.<\/p>\n<h2>\u0414\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/h2>\n<p>\u041b\u044e\u0431\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 (DFT) \u2014 \u0432\u0435\u0449\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u0438\u043d\u044b, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0434\u043b\u0438\u043d\u044b, \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440. \u0418\u043b\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0443, \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e. \u041d\u0430\u0447\u043d\u0443 \u044f \u0441 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435, \u0430 \u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0423\u043e\u043b\u0448\u0430-\u0410\u0434\u0430\u043c\u0430\u0440\u0430 (WHT) \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u043f\u043e\u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430<\/p>\n<p>\u0433\u0434\u0435 \u2014 \u043a\u043e\u0440\u0435\u043d\u044c-\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438\u0437 1. \u042d\u0442\u043e \u0432 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435. \u0412\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c.<br \/>\u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u043e\u043d\u043e \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439<\/p>\n<p>\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u2014 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442.<\/p>\n<p>\u0422\u0443\u0442 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b\u0440\u0430\u0432\u0435\u043d.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<h2>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/h2>\n<p>\u041f\u0440\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u0438\u0448\u0443\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438, \u0438\u043b\u0438 \u0442\u0438\u043f\u0430 \u0442\u043e\u0433\u043e. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u0435\u043d\u044f \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442. \u0427\u0438\u0441\u0442\u043e \u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u0438\u0441\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 (\u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0430\u0444\u0444\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f). \u041f\u0440\u043e\u0441\u0442\u043e \u0431\u0430\u0437\u0438\u0441 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432 \u043d\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0434\u0435\u043b\u0435.<\/p>\n<p>\u0414\u043b\u044f DFT \u0431\u0430\u0437\u0438\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 :<\/p>\n<p> \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0432 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043f\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0442\u043e, \u0447\u0442\u043e \u0442\u0443\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u2014 \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e DFT \u0432 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u043c \u0432\u0438\u0434\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0432\u0438\u0434\u0438\u043c, \u043f\u043e\u0447\u0435\u043c\u0443, \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u044f\u043c\u043e\u0435 DFT, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e<\/p>\n<p>\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0447\u0435\u0440\u0442\u0430 \u043d\u0430\u0434  &#8212; \u044d\u0442\u043e \u0441\u0438\u043c\u0432\u043e\u043b \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u0432 . \u042d\u0442\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0430\u0447\u0435:<\/p>\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043d\u0430\u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e. \u0414\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u2014 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%BD%D0%B8%D1%82%D0%B0%D1%80%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0443\u043d\u0438\u0442\u0430\u0440\u043d\u0430\u044f<\/a>, \u0441 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u043d\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u043e\u0438\u0441\u0442\u0438\u043d\u0443 \u0443\u043d\u0438\u0442\u0430\u0440\u043d\u043e\u0439. \u0420\u0430\u0441\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c\u2014 \u044d\u0442\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0440\u0430\u0432\u043d\u043e\u0435 <\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u043c \u043e\u0431\u044f\u0437\u0430\u043d \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u043c \u043d\u0430<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-365903","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/365903","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=365903"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/365903\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=365903"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=365903"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=365903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}