{"id":331437,"date":"2022-04-03T15:00:21","date_gmt":"2022-04-03T15:00:21","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=331437"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=331437","title":{"rendered":"<span>\u0423\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0440\u0430\u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432\u0430\u0441 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043d\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0440\u0430\u0437\u044b\u0441\u043a\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435, \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: C, C++, Scheme \u0438 Python &#8212; \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u00ab\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0436 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439\u00bb, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u0451\u043c\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Scheme, \u0447\u0442\u043e, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435\u043c \u043d\u0430 \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0441\u0442\u0440\u043e\u0432.<\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e<\/h2>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u043e\u0434\u043d\u0438\u043c \u0442\u043e\u043c\u043d\u044b\u043c \u0432\u0435\u0447\u0435\u0440\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0430 \u0433\u043b\u0430\u0437\u0430 \u043f\u043e\u043f\u0430\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0430\u0432\u0442\u043e\u0440 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0442\u0440\u0438 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: Python, C \u0438  \u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 IA-32 &#8212; \u043f\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0438 \u043f\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u0430\u044f: \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 250000.<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62497f82036a421272cd5670\" data-style=\"\" id=\"62497f82036a421272cd5670\" width=\"\"><\/div>\n<p>\u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0442\u0430\u043a\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 &#8212; \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 &#8212; \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0441\u0440\u0435\u0434\u0438 \u044d\u0442\u0438\u0445 \u0442\u0440\u0451\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0437\u0430\u0439\u043c\u0451\u0442 Scheme. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e Scheme \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>Scheme &#8212; \u044f\u0437\u044b\u043a \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f\u043c\u0438, \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0448\u044c \u043e\u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u044b\u0442\u0438. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0437 \u0432 10 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 Python \u0432 \u0432\u0438\u0434\u0435\u043e. \u0412\u043e\u0442 <a href=\"https:\/\/asciinema.org\/a\/T9xlP7ZO0JxSmakICQJzsSR8Q\" rel=\"noopener noreferrer nofollow\">asciicast<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u0437\u0430\u0442\u0435\u0438.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0443\u0434\u0438\u0432\u0438\u043b (\u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u043d\u0435 \u0442\u043e\u0440\u043e\u043f\u0438\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e <code>sqrt(n)<\/code>; \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0434\u0440\u0430\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430, \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u044d\u0442\u0443 \u0434\u0435\u0442\u0430\u043b\u044c \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a).<\/p>\n<pre><code>time scheme --script primes.scm 22044  real    0m1.408s<\/code><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, Chez Scheme \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 (\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Scheme) \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u0438\u0442 \u0441\u0432\u043e\u0438 \u0446\u0438\u043a\u043b\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u043d\u0430 C \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u0436\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442? \u00ab\u0414\u0430, \u043d\u0443, \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c!\u00bb &#8212; \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f: \u00ab\u041f\u0440\u043e\u0441\u0442\u043e \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u0432\u0438\u0434\u0435\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440.\u00bb \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 \u042f\u043d\u0434\u0435\u043a\u0441 \u0441 \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>cpu<\/code><\/p>\n<\/td>\n<td>\n<p><code>Intel Xeon Processor (Icelake) 1999.995MHz<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>uname -v<\/code><\/p>\n<\/td>\n<td>\n<p><code>#1 SMP Debian 5.10.92-2 (2022-02-28)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>gcc --version<\/code><\/p>\n<\/td>\n<td>\n<p><code>gcc (Debian 10.2.1-6) 10.2.1 20210110<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>pypy --version<\/code><\/p>\n<\/td>\n<td>\n<p><code>PyPy 7.3.3 with GCC 10.2.1 20210110<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>scheme --version<\/code><\/p>\n<\/td>\n<td>\n<p><code>9.5.4<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043b\u044c\u0448\u0435, \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b <a href=\"https:\/\/gist.github.com\/mbakhterev\/85eba67e7adb3597a9633bb7a14ab2ef\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a><\/p>\n<h2>\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f 0: \u041d\u0435 \u0432\u0435\u0440\u044e!<\/h2>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430 C \u0438 Python, \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u0440\u043e\u043b\u0438\u043a\u0430. \u042f \u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 Python \u0438 C, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u043e\u044f\u0441\u043d\u044f\u0442\u044c.<\/p>\n<p><strong>primes-0.c<\/strong> \u0438 <strong>primes-0.py<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ primes-0.c #include &lt;stdio.h>  int is_prime(int n) {   for(int p = 2; p &lt;= n\/2; p++)     if (!(n % p))       return 0;   return 1; }  void main() {   int n_primes = 0;    for(int n = 2; n &lt; 250001; n++)     n_primes += is_prime(n);    printf(\"%d\\n\", n_primes); }<\/code><\/pre>\n<pre><code class=\"python\"># primes-0.py def is_prime(n):     for p in range(2, n\/\/2 + 1):         if (not (n%p)):             return 0     return 1  n_primes = 0  for i in range(2, 250001):     n_primes += is_prime(i)  print(str(n_primes))<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u043e Scheme, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0437\u043d\u0430\u043a\u043e\u043c\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u043e\u0434.<\/p>\n<pre><code>; primes-0.scm (define (prime? n P) (or (null? P)                          (> (car P) (quotient n 2))                          (and (positive? (remainder n (car P)))                               (prime? n (cdr P)))))  (define primes (cons 2 '()))  (do ((n 3 (+ 2 n))      (P primes (if (not (prime? n primes)) P (begin (set-cdr! P (cons n '())) (cdr P)))))   ((> n 250000) (display (length primes)) (newline)))<\/code><\/pre>\n<p>\u041a\u043e\u0434 <strong>primes-0.scm<\/strong> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439.<\/p>\n<p>\u0427\u0430\u0441\u0442\u044c <strong>\u043f\u0435\u0440\u0432\u0430\u044f<\/strong>. \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <code>prime?<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>#f<\/code> (\u043b\u043e\u0436\u044c), \u0435\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0447\u0438\u0441\u043b\u0430 <code>n<\/code> \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 <code>P<\/code>. \u0412 \u043d\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 Scheme.<\/p>\n<p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>(or E1 ... En)<\/code> \u0438 <code>(and E1 ... En)<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 (short-circuiting). \u0412 C \u0431\u044b \u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>E1 || ... || En<\/code> \u0438 <code>E1 &amp;&amp; ... &amp;&amp; En<\/code>.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043a\u0438 \u0432 Lisp \u0441\u043e \u0441\u0442\u0430\u0440\u043e\u0434\u0430\u0432\u043d\u0438\u0445 \u0432\u0440\u0435\u043c\u0451\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 cons-\u043f\u0430\u0440\u0430\u043c\u0438. Cons \u043e\u0442 constructor: \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (s-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439), \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u044b &#8212; \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043d\u0435\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u0442, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435. \u041f\u0430\u0440\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 (\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0430\u044f, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0442, \u0432 Scheme \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0432\u043d\u043e\u043f\u0440\u0430\u0432\u043d\u044b) <code>cons<\/code>.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 &#8212; \u044d\u0442\u043e \u043f\u0430\u0440\u0430 <em>(\u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432)<\/em>. \u0418\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 <code>L<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <code>e<\/code> \u0432 \u0433\u043e\u043b\u043e\u0432\u0443: <code>(cons e L)<\/code>. \u0421\u043f\u0438\u0441\u043e\u043a <em>[1, 2, 3, 4]<\/em> \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c <code>(cons 1 (cons 2 (cons 3 (cons 4 '()))))<\/code>. \u0417\u0434\u0435\u0441\u044c <code>'()<\/code> &#8212; \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u041f\u0430\u0440\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u0438 \u0432\u0442\u043e\u0440\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b <code>car<\/code> \u0438 <code>cdr<\/code>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u0440 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Lisp \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 IBM 704. <code>car<\/code> &#8212; contents of the address part of the register, <code>cdr<\/code> &#8212; contents of the decrement part of the register. \u041f\u043e\u0434 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e cons-\u043f\u0430\u0440\u0443 &#8212; \u041c\u043e\u0440\u0444\u0435\u0443\u0441 \u0443\u0432\u0438\u0434\u0435\u043b \u0431\u044b \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 <code>L<\/code> &#8212; \u0441\u043f\u0438\u0441\u043e\u043a, \u0442\u043e <code>(car L)<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 <code>L<\/code>, <code>(cdr L)<\/code> &#8212; \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u0430. \u0415\u0441\u043b\u0438 <code>L<\/code> = <em>[1, 2, 3, 4]<\/em>, \u0442\u043e <code>(car L)<\/code> = <em>1<\/em> \u0438 <code>(cdr L)<\/code> = <em>[2, 3, 4]<\/em> = <code>(cons 2 (cons 3 (cons 4 '())))<\/code>.<\/p>\n<p>\u042d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u043d\u043e \u043d\u0430\u043f\u0438\u0448\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443. Scheme (\u043a\u0430\u043a \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u044b Lisp) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 cons-\u044f\u0447\u0435\u0435\u043a \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438 <code>set-car!<\/code> \u0438 <code>set-cdr!<\/code>.<\/p>\n<p>\u041f\u0440\u0438\u043d\u044f\u0432 \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435, \u043a\u043e\u0434 <code>prime?<\/code> <\/p>\n<pre><code>; primes-0.scm                                                                                 (define (prime? n P) (or (null? P)                                                                                      (> (car P) (quotient n 2))                                                                     (and (positive? (remainder n (car P)))                                                              (prime? n (cdr P)))))<\/code><\/pre>\n<p>\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0430\u043a: <code>(prime? n P)<\/code> &#8212; \u0438\u0441\u0442\u0438\u043d\u0430,<\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 <code>(null? P)<\/code> &#8212; \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0442\u043e \u0435\u0441\u043b\u0438 <code>(> (car P) (quotient n 2))<\/code> &#8212; \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0435\u0441\u0442\u044c, \u0442\u043e: <\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 <code>(positive? (remainder n (car P)))<\/code> &#8212; \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043d\u0435 \u0434\u0435\u043b\u0438\u0442 <code>n<\/code>,<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0442\u043e\u0433\u0434\u0430, \u0435\u0441\u043b\u0438 <code>(prime? n (cdr P))<\/code> &#8212; \u0432 \u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0434\u043b\u044f <code>n<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 Scheme \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u043e\u0432 <code>(prime? n (cdr P))<\/code> \u0431\u0443\u0434\u0435\u0442 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u043c, \u0442\u043e \u0435\u0441\u0442\u044c, \u0441\u0442\u0435\u043a \u043a\u0430\u0434\u0440\u043e\u0432 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e <code>prime?<\/code> &#8212; \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 <code>n<\/code> \u043e\u0442 3 \u0434\u043e 250000 c \u0448\u0430\u0433\u043e\u043c 2 \u0438, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b <code>primes<\/code>. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>P<\/code> &#8212; \u043a\u0443\u0440\u0441\u043e\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0435\u0446. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0446\u0438\u043a\u043b\u043e\u043c <code>do<\/code> <\/p>\n<pre><code>(do ((V1 I1 U1) ... (Vn In Un))   (C E1 ... Ek)   B1   ...   Bm)<\/code><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0442\u0430\u043a:<\/p>\n<ul>\n<li>\n<p>\u0412 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 <code>do<\/code> \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>V1<\/code>, &#8230;, <code>Vn<\/code>. \u041a\u0430\u0436\u0434\u0430\u044f <code>Vj<\/code> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>Ij<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430 <code>Vj<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>Uj<\/code>. \u0426\u0438\u043a\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>\u0421<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c, \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u0438\u0437 \u0446\u0438\u043a\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>E1<\/code>, &#8230;, <code>Ek<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>do<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <code>Ek<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043b\u0435 \u0446\u0438\u043a\u043b\u0430 <code>B1<\/code>, &#8230;, <code>Bn<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 <code>do<\/code> \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 <strong>primes-0.scm<\/strong><\/p>\n<pre><code>(do ((n 3 (+ 2 n))  (P primes (if (not (prime? n primes)) P (begin (set-cdr! P (cons n '())) (cdr P)))))   ((> n 250000) (display (length primes)) (newline)))<\/code><\/pre>\n<p>\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0430\u043c\u044b\u043c \u043c\u0443\u0434\u0440\u0451\u043d\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f  \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>P<\/code>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e cons-\u043f\u0430\u0440\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 <code>primes<\/code>:<\/p>\n<pre><code>(if (not (prime? n primes)) P (begin (set-cdr! P (cons n '())) (cdr P)))<\/code><\/pre>\n<p>\u0412 \u043d\u0451\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 <code>n<\/code>. \u0415\u0441\u043b\u0438 <code>n<\/code> \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>P<\/code> \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0442\u043e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 cons-\u043f\u0430\u0440\u044b <code>P<\/code> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e cons-\u043f\u0430\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <em>[n]<\/em>. \u042d\u0442\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u043b\u043e\u043a\u0430 <code>begin<\/code> &#8212; <code>(cdr P)<\/code> &#8212; \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>P<\/code>. \u0418\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0446\u0438\u043a\u043b\u0430: <code>P<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e cons-\u043f\u0430\u0440\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 <code>primes<\/code> &#8212; \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<pre><code>$ gcc primes-0.c &amp;&amp; time .\/a.out  22044  real    0m3.854s<\/code><\/pre>\n<p>\u0410\u0432\u0442\u043e\u0440 \u0440\u043e\u043b\u0438\u043a\u0430 \u0433\u0440\u0443\u0431\u043e \u043f\u043e\u0448\u0443\u0442\u0438\u043b \u043d\u0430\u0434 \u043f\u0438\u0442\u043e\u043d\u0438\u0441\u0442\u0430\u043c\u0438, \u0437\u0430\u0431\u044b\u0432 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u044b JIT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c PyPy, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<pre><code>$ time pypy primes-0.py  22044  real    0m4.859s<\/code><\/pre>\n<p>Scheme &#8230;<\/p>\n<pre><code>$ time scheme --script primes-0.scm  22044  real    0m1.468s<\/code><\/pre>\n<p>.. \u0432 2.5 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 C. \u00ab\u041a\u0430\u043a \u0436\u0435 \u0442\u0430\u043a? \u041d\u0435 \u0432\u0435\u0440\u044e! \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442!? \u0412 Debian-\u0432\u0435\u0440\u0441\u0438\u0438 GCC \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438? \u041d\u0430\u0434\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0451.\u00bb &#8212; \u0432\u0435\u0440\u0442\u0435\u043b\u043e\u0441\u044c \u0443 \u043c\u0435\u043d\u044f \u0432 \u0433\u043e\u043b\u043e\u0432\u0435.<\/p>\n<pre><code>$ gcc -O3 primes-0.c &amp;&amp; time .\/a.out  22044  real    0m2.769s<\/code><\/pre>\n<p>\u00ab\u0414\u0430 \u0447\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435!?\u00bb &#8212; \u0432\u043e\u043f\u0440\u043e\u0448\u0430\u043b \u043c\u043e\u0439 \u0443\u0436\u0435 \u0441\u043b\u0435\u0433\u043a\u0430 \u0432\u043e\u0441\u043f\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0443\u043c. \u041d\u043e \u0440\u0430\u0437 \u0432 \u0445\u043e\u0434 \u043f\u043e\u0448\u043b\u0430 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u0442\u043e, \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Scheme.<\/p>\n<p><strong>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445<\/strong>, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u044e \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u043d\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0441 fixnum-\u0430\u043c\u0438. \u0412 Lisp fixnum-\u0430\u043c\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0431\u0435\u0437 boxing-\u0430, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c.<\/p>\n<p><strong>primes-fx-0.scm<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">; primes-fx-0.scm (define (prime? n P) (or (null? P)                          (fx> (car P) (fxquotient n 2))                          (and (fxpositive? (fxremainder n (car P)))                               (prime? n (cdr P)))))  (define primes (cons 2 '()))  (do ((n 3 (fx+ 2 n))      (P primes (if (prime? n primes) (begin (set-cdr! P (cons n '())) (cdr P)) P)))   ((fx> n 250000) (display (length primes)) (newline)))<\/code><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445<\/strong>, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435 \u0442\u044f\u0436\u043a\u0438\u0435.<\/p>\n<pre><code>$ time scheme --optimize-level 3 --script primes-fx-0.scm  22044  real    0m0.538s<\/code><\/pre>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 C, \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 5 \u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 Scheme (\u044f\u0437\u044b\u043a\u0435 \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430), \u0432\u043e\u0432\u0441\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441 \u0446\u0438\u043a\u043b\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438!?<\/p>\n<p>\u0412\u0435\u0447\u0435\u0440 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u0440\u044f\u043b \u0441\u0432\u043e\u044e \u0442\u043e\u043c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h2>\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f 1: \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0437\u0438\u0440\u0443\u0439 \u044d\u0442\u043e!<\/h2>\n<p>\u042f \u0431\u044b\u043b \u0433\u043e\u0442\u043e\u0432 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0431\u0435\u0436\u0434\u0430\u044e\u0442 \u0433\u0440\u0443\u0431\u0443\u044e \u0441\u0438\u043b\u0443. \u041d\u043e \u044f \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u043b \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (\u0432\u0435\u0434\u044c, \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0448\u0451\u043b \u043d\u0435 \u0434\u043e <code>sqrt(n)<\/code>). \u041c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Chez Scheme \u0445\u043e\u0440\u043e\u0448.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043d\u0430 Python, C++ \u0438 C, \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c.<\/p>\n<p>\u041d\u0430 Python \u0438 C++ \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0421\u043f\u0438\u0441\u043a\u0438 \u0432 Python \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u043d\u0435\u0446. \u0412 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c C++ \u0435\u0441\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0430\u043c\u043e\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u043d\u0435\u0446 (\u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f C++ \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435).<\/p>\n<p>\u041a\u043e\u0434 \u043d\u0430 C++ \u0438 Python \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u0435\u043d.<\/p>\n<p><strong>python-1.cpp<\/strong> \u0438 <strong>python-1.py<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ primes-1.cpp #include &lt;iostream> #include &lt;vector>  using std::vector;  static bool is_prime(const long n, const vector&lt;long> &amp;P) {   for (auto p : P) {     if (p > n \/ 2) return true;     if (!(n % p)) return false;   }   return true; }  int main(int argc, char *argv[]) {   if (argc &lt; 2) {     std::cerr &lt;&lt; \"Specify limit\" &lt;&lt; std::endl;     exit(1);   }    const unsigned long limit = std::stol(argv[1]);    vector&lt;long> primes = {2};   for(long n = 3; n &lt;= limit; n += 2) {     if (is_prime(n, primes)) {       primes.push_back(n);     }   }    std::cout &lt;&lt; primes.size() &lt;&lt; std::endl; }<\/code><\/pre>\n<pre><code class=\"python\"># primes-1.py import sys  def is_prime(n, P):     for p in P:         if p > n\/\/2: return True         if not (n%p): return False     return True  limit = int(sys.argv[1])  primes = [2] for n in range(3, limit + 1, 2):     if is_prime(n, primes): primes.append(n)  print(len(primes))<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u0434 \u043d\u0430 Scheme \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 <strong>primes-fx-0.scm<\/strong> \u0442\u0435\u043c, \u0447\u0442\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c: <code>(string->number (cadr (command-line)))<\/code>. \u0412 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <code>cadr<\/code>. \u041e\u0431\u044b\u0447\u043d\u043e \u0435\u0451 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>(define (cadr L) (car (cdr L)))<\/code><\/pre>\n<p><code>cadr<\/code> \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 cons-\u043f\u0430\u0440\u044b \u0441\u043f\u0438\u0441\u043a\u0430, \u0442\u043e \u0435\u0441\u0442\u044c, \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<p><strong>primes-1.scm<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>; primes-1.scm (define (prime? n P)    (or (null? P)        (fx> (car P) (fxquotient n 2))        (and (fxpositive? (fxremainder n (car P)))                                                                                                                        (prime? n (cdr P)))))  (define N (string->number (cadr (command-line))))  (define primes (cons 2 '()))                                                                                                                                                              (do ((n 3 (fx+ 2 n))      (P primes (if (prime? n primes) (begin (set-cdr! P (cons n '())) (cdr P)) P)))   ((fx> n N) (display (length primes)) (newline)))<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 C &#8212; \u043a\u0430\u043b\u044c\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Scheme \u0441 \u043e\u0434\u043d\u0438\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>counting_free<\/code> \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u044f\u0442\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e: \u044f\u0434\u0440\u043e \u041e\u0421 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041d\u043e \u0432 Python \u0438 Scheme \u0435\u0441\u0442\u044c \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0430 C++ \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0438 \u043d\u0430 C \u0431\u044b\u0442\u044c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c\u0438.<\/p>\n<p><strong>primes-1.c<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ primes-1.c                                                                                                                                                #include &lt;stdio.h>                                                                                                                                           #include &lt;stdlib.h>                                                                                                                                                                                                                                                                                                       typedef struct cons {                                                                                                                                          long p;                                                                                                                                                      struct cons *next;                                                                                                                                         } Cons;                                                                                                                                                                                                                                                                                                                   static Cons *cons(const long v) {                                                                                                                              Cons *const c = malloc(sizeof(Cons));                                                                                                                        c->p = v;                                                                                                                                                    c->next = NULL;                                                                                                                                              return c;                                                                                                                                                  }                                                                                                                                                                                                                                                                                                                         static int is_prime(const long n, const Cons *const list) {                                                                                                    const Cons *P = list;                                                                                                                                        for (const Cons *P = list; P; P = P->next) {                                                                                                                   if (P->p > n\/1) return 1;                                                                                                                                    if (n % P->p == 0) return 0;                                                                                                                               }                                                                                                                                                            return 1;                                                                                                                                                  }                                                                                                                                                                                                                                                                                                                         static long counting_free(Cons *const list) {                                                                                                                  long n = 0;                                                                                                                                                  const Cons *P = list;                                                                                                                                        while(P) {                                                                                                                                                     const Cons *const next = P->next;                                                                                                                            free((void *) P);                                                                                                                                            n++;                                                                                                                                                         P = next;                                                                                                                                                  }                                                                                                                                                            return n;                                                                                                                                                  }                                                                                                                                                                                                                                                                                                                         int main(int argc, char *argv[]) {                                                                                                                             if (argc &lt; 2) {                                                                                                                                                fprintf(stderr, \"Specify limit\\n\");                                                                                                                          return 1;                                                                                                                                                  }                                                                                                                                                                                                                                                                                                                         const long N = atol(argv[1]);                                                                                                                                                                                                                                                                                             Cons *const primes = cons(2);                                                                                                                                Cons *P = primes;                                                                                                                                            for(long n = 3; n &lt;= N; n += 2) {                                                                                                                              if (is_prime(n, primes)) {                                                                                                                                     P->next = cons(n);                                                                                                                                           P = P->next;                                                                                                                                               }                                                                                                                                                          }                                                                                                                                                                                                                                                                                                                         printf(\"%ld\\n\", counting_free(primes));                                                                                                                      return 0;                                                                                                                                                  }                                                                                                                                                            <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442\u043e\u0432.<\/p>\n<pre><code>$ time scheme --script primes-1.scm  250000                                                                                                                  22044  real    0m1.156s  $ g++ primes-1.cpp &amp;&amp; time .\/a.out 250000 22044  real    0m1.231s  $ gcc primes-1.c &amp;&amp; time .\/a.out 250000 22044  real    0m0.972s  $ time pypy primes-1.py 250000 22044  real    0m0.505s <\/code><\/pre>\n<p>\u00ab\u0414\u0430 \u0432\u044b \u0438\u0437\u0434\u0435\u0432\u0430\u0435\u0442\u0435\u0441\u044c! PyPy!?\u00bb PyPy \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0440\u0435\u0437\u0432\u0435\u0435 \u0432\u0441\u0435\u0445, \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432 2 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u0430. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 C++ \u0438 \u0421 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u0430\u043b\u0435\u043a\u043e \u043e\u0442\u043e\u0440\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Scheme. \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 3-\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 C++ \u0432 2.5 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u0438 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0441\u044e\u0440\u043f\u0440\u0438\u0437), \u043d\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0432\u0437\u043e\u0439\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 PyPy \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e. \u0410 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 C \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Scheme.<\/p>\n<pre><code>$ gcc -O3 primes-1.c &amp;&amp; time .\/a.out 250000                                                                                                                  22044                                                                                                                                                                                                                                                                                                                     real    0m0.862s                                                                                                                                                                                                                                                                                                          $ time scheme --optimize-level 3 --script primes-1.scm 250000                                                                                                22044                                                                                                                                                                                                                                                                                                                     real    0m0.514s                                                                                                                                                                                                                                                                                                          $ g++ -O3 primes-1.cpp &amp;&amp; time .\/a.out 250000                                                                                                                22044                                                                                                                                                                                                                                                                                                                     real    0m0.459s                                                                                                                                             <\/code><\/pre>\n<p>\u00ab\u0414\u0430 \u0447\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435!?\u00bb<\/p>\n<h2>\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f 2: \u0414\u0435\u0434\u0438\u043d\u0430\u043c\u0438\u0437\u0438\u0440\u0443\u0439 \u044d\u0442\u043e!<\/h2>\n<p>\u0417\u043d\u0430\u043a\u043e\u043c\u044b\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043d\u0430 \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0435, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438, \u0447\u0442\u043e \u00ab\u044d\u0442\u043e\u00bb &#8212; \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u0443\u0447\u0435\u0439, \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 malloc-\u043e\u0432. \u00ab\u0427\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c? \u0413\u0434\u0435 \u0442\u0430\u043c \u043c\u043e\u0439 page size?\u00bb &#8212; \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f \u0438 \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0437\u0430 \u0434\u0435\u043b\u043e.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 C \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0451 \u0442\u043e\u0442 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043a <code>realloc<\/code>. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 &#8212; \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 GCC \u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>A->cursor = A->len<\/code> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438  <code>__builtin_expect<\/code>.<\/p>\n<p><strong>primes-2.c<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ primes-2.c  #include &lt;stdio.h> #include &lt;stdlib.h> #include &lt;unistd.h>  typedef struct {   long *restrict buf;   long len;   long cursor; } Array;  static Array make_array() {   const long pagelen = sysconf(_SC_PAGESIZE) \/ sizeof(long);   return (Array) {       .buf = malloc(pagelen * sizeof(long)),       .len = pagelen,       .cursor = 0 }; }  #define unlikely(X) __builtin_expect((X), 0)  static void push(const long val, Array *restrict const A) {   if (unlikely(A->cursor >= A->len)) {     A->len += sysconf(_SC_PAGESIZE) \/ sizeof(long);     A->buf = realloc(A->buf, A->len * sizeof(long));   }   A->buf[A->cursor++] = val; }  static long counting_free(Array *restrict const A) {   free(A->buf);   A->buf = NULL;   return A->cursor; }  static int is_prime(const long n, const Array *restrict const P) {   for (int i = 0; i &lt; P->cursor; i++) {     const long p = P->buf[i];     if (p > n \/ 2) return 1;     if (n % p == 0) return 0;   }   return 1; }  int main(int argc, char *argv[]) {   if (argc &lt; 2) {     fprintf(stderr, \"Specify limit\\n\");     return 1;   }   const long N = atol(argv[1]);    Array primes = make_array();   push(2, &amp;primes);   for(long n = 3; n &lt;= N; n += 2)     if (is_prime(n, &amp;primes)) push(n, &amp;primes);    printf(\"%ld\\n\", counting_free(&amp;primes));   return 0; } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 libc \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044f\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e. \u0412\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>mremap<\/code>. \u0427\u0442\u043e \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<pre><code>$ gcc primes-2.c &amp;&amp; strace .\/a.out 250000 ... mremap(0x7f60f2ce0000, 172032, 176128, MREMAP_MAYMOVE) = 0x7f60f2ce0000 mremap(0x7f60f2ce0000, 176128, 180224, MREMAP_MAYMOVE) = 0x7f60f2ce0000 ...<\/code><\/pre>\n<p>\u0421\u043d\u0438\u0437\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0430 Scheme. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 Lisp-\u044b (Chez Scheme \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435), \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0438\u0434\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432. \u041d\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Chez \u043d\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432: \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u041e\u0434\u043d\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445: \u0441\u043f\u0438\u0441\u043e\u043a fixnum-\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 (fxvector), \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0443\u0440\u0441\u043e\u0440, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u041a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u0421\u043a\u0430\u0437\u0430\u043d\u043e &#8212; \u0441\u0434\u0435\u043b\u0430\u043d\u043e.<\/p>\n<p><strong>primes-2.scm<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>; primes-2.scm  (define page-length 512)  (define (cursor P) (fxvector-ref P 0)) (define (cursor-set! P c) (fxvector-set! P 0 c))  (define (make-page n)   (let ((P (make-fxvector page-length)))     (cursor-set! P 2)     (fxvector-set! P 1 n)     P))  (define (push! n P)   (let ((A (car P))         (c (cursor (car P))))     (if (fx&lt; c (fxvector-length A))         (begin (fxvector-set! A c n)                (cursor-set! A (fx1+ c))                P)         (begin (set-cdr! P (cons (make-page n) '()))                (cdr P)))))  (define (prime? n pages)   (let ((l (fxquotient n 2)))     (let next ((P pages))       (or (null? P)           (let ((A (car P))                 (c (cursor (car P))))             (let loop ((i 1))               (if (fx&lt; i c)                   (let ((p (fxvector-ref A i)))                     (or (fx> p l)                         (and (fxpositive? (fxremainder n p))                              (loop (fx1+ i)))))                   (next (cdr P)))))))))  (define (count P)   (do ((p P (cdr p))        (S 0 (fx+ S (cursor (car p)) -1)))     ((null? p) S)))  (let ((N (string->number (cadr (command-line))))       (primes (cons (make-page 2) '())))   (do ((n 3 (fx+ 2 n))        (P primes (if (prime? n primes) (push! n P) P)))     ((> n N) (display (count primes)) (newline)))) <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432 <strong>primes-2.scm<\/strong> \u0437\u0430\u0434\u0430\u044e\u0442 \u00ab\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443\u00bb \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<pre><code>(define (cursor P) (fxvector-ref P 0)) (define (cursor-set! P c) (fxvector-set! P 0 c))  (define (make-page n)   (let ((P (make-fxvector page-length)))     (cursor-set! P 2)     (fxvector-set! P 1 n)     P))<\/code><\/pre>\n<p><code>fxvector-ref<\/code> \u0438 <code>fxvector-set!<\/code> &#8212; \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <code>make-fxvector<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u0435\u0433\u043e \u043d\u0443\u043b\u044f\u043c\u0438.<\/p>\n<p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>(let ((V1 E1) ... (VN EN)) B1 ... BK)<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0442\u0435\u043b\u0430 (<code>Bi<\/code>) \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u044d\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e<\/p>\n<pre><code>((lambda (V1 ... VN) B1 ... BK) E1 ... EN)<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0437\u0432\u0430\u043d\u044b \u043d\u0443\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0451 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c. \u0412 \u0440\u0435\u0437\u0430\u043b\u044c\u0442\u0430\u0442\u0435 <code>Bi<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code>Vi<\/code>.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <code>push!<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0431\u0435\u0441\u0445\u0438\u0442\u0440\u043e\u0441\u0442\u043d\u043e.<\/p>\n<pre><code>(define (push! n P)                                                                                                                                            (let ((A (car P))                                                                                                                                                  (c (cursor (car P))))                                                                                                                                    (if (fx&lt; c (fxvector-length A))                                                                                                                                  (begin (fxvector-set! A c n)                                                                                                                                        (cursor-set! A (fx1+ c))                                                                                                                                     P)                                                                                                                                                    (begin (set-cdr! P (cons (make-page n) '()))                                                                                                                        (cdr P)))))                                                                                                                                   <\/code><\/pre>\n<p>\u041e\u043d\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e <code>P<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e cons-\u043f\u0430\u0440\u0443 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043c\u0435\u0441\u0442\u043e, \u0442\u043e \u043d\u0430 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e <code>n<\/code> \u0438 \u043a\u0443\u0440\u0441\u043e\u0440 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043c\u0435\u0441\u0442\u0430 \u043d\u0435\u0442, \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>n<\/code>, \u044d\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u043e\u0432\u0443\u044e cons-\u043f\u0430\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u00ab\u043f\u043e\u0434\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430, \u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 <code>prime?<\/code> \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <code>let<\/code>: <code>(let N ((V1 E1) ... (VN EN)) B1 ... BK)<\/code>. \u041f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u043e\u043d \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e:<\/p>\n<pre><code>((rec N (lamda (V ...) B ...)) E ...)                                                                                                                        <\/code><\/pre>\n<p><code>(rec N E)<\/code> &#8212; \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c, \u043e\u043d \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>E<\/code>, \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c <code>E<\/code> &#8212; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>N<\/code>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>(rec ones (stream-cons 1 ones)<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0438\u0437 \u0435\u0434\u0438\u043d\u0438\u0446:<\/p>\n<pre><code>> (stream->list (stream-take 10 (rec ones (stream-cons 1 ones))))                                                                                            (1 1 1 1 1 1 1 1 1 1)                                                                                                                                        <\/code><\/pre>\n<p>\u0418\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>rec<\/code>, \u043c\u043e\u0436\u043d\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438<\/p>\n<pre><code>> (stream->list                                                                                                                                                  (stream-take 20                                                                                                                                                (rec fibs (stream-cons 0 (stream-cons 1 (stream-map + fibs (stream-cdr fibs)))))))                                                                     (0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181)                                                                                            <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/p>\n<pre><code>((rec N (lamda (V1 ... VN) B1 ... BK)) E1 ... EN)                                                                                                            <\/code><\/pre>\n<p>\u0437\u0430\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438 N, \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0451 \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c. \u0427\u0443\u0432\u0441\u0442\u0432\u0443\u044e, \u0447\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b.<\/p>\n<pre><code>> ((rec loop (lambda (n r) (if (zero? n) r (loop (- n 1) (* n r))))) 10 1) 3628800<\/code><\/pre>\n<p>\u0418\u043b\u0438, \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e, \u0432 \u0444\u043e\u0440\u043c\u0435 <code>let<\/code>:<\/p>\n<pre><code>(let loop ((n 10) (r 1)) (if (zero? n) r (loop (- n 1) (* n r))))<\/code><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <code>let<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0445\u043e\u0434\u0430\u043c\u0438.<\/p>\n<pre><code>(define (prime? n pages)   (let ((l (fxquotient n 2)))     (let next ((P pages))       (or (null? P)           (let loop ((i 1))             (if (fx&lt; i (cursor (car P)))                 (let ((p (fxvector-ref (car P) i)))                   (or (fx> p l)                       (and (fxpositive? (fxremainder n p))                            (loop (fx1+ i)))))                 (next (cdr P))))))))<\/code><\/pre>\n<p>\u0412 <code>prime?<\/code> \u0434\u0432\u0430 \u0446\u0438\u043a\u043b\u0430: <code>next<\/code> \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u0438 <code>loop<\/code> \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 <code>next<\/code> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a &#8212; <code>(null? P)<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u0443, \u0438 \u044d\u0442\u0430 \u0438\u0441\u0442\u0438\u043d\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e <code>or<\/code>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0442\u043e \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445, <code>(car P)<\/code>, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0446\u0438\u043a\u043b <code>loop<\/code>. \u0415\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c &#8212; \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <code>(fx&lt; i (cursor (car P))<\/code> \u0441\u0442\u0430\u043b\u043e \u043b\u043e\u0436\u043d\u044b\u043c, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0446\u0438\u043a\u043b\u0430 <code>next<\/code> \u0441 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u043c\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446: <code>(next (cdr P))<\/code>. \u0415\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u0430 \u0435\u0441\u0442\u044c, \u0442\u043e\u0433\u0434\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <code>p<\/code>. \u0415\u0441\u043b\u0438 \u043e\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435, <code>or<\/code> \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0438 <code>(fx> p l)<\/code>, \u0438 \u044d\u0442\u0430 \u0438\u0441\u0442\u0438\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u0431\u043e\u0438\u0445 \u0446\u0438\u043a\u043b\u043e\u0432. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 <code>p<\/code> \u0434\u0435\u043b\u0438\u0442 <code>n<\/code>, \u0446\u0438\u043a\u043b\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043b\u043e\u0436\u044c. \u0410 \u0435\u0441\u043b\u0438 <code>p<\/code> \u043d\u0435 \u0434\u0435\u043b\u0438\u0442 <code>n<\/code>, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 <code>n<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 <code>loop<\/code> \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u044b\u043c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435: <code>(loop (fx1+ i))<\/code>.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0442\u043e\u043a \u043a\u043e\u0434\u0430: \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0447\u0438\u0441\u0435\u043b, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b &#8212; \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u044b. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0443 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0443, \u0447\u0442\u043e \u0438 \u0432 <strong>prime-1.scm<\/strong>.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <strong>prime-2.scm<\/strong> \u043f\u0440\u043e\u043a\u0440\u0430\u043b\u0430\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u0430 (\u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432). \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u043a\u0430\u043a <em>n\/2<\/em>, \u0442\u043e \u0435\u0441\u0442\u044c <code>(fxquotient n 2)<\/code>, \u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0441\u043a\u043e\u043c \u043f\u043e\u0440\u044b\u0432\u0435 \u044f \u0442\u0430\u043a\u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u0435\u0451, \u043a\u0430\u043a <code>(isqrt n)<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c, \u043a\u0430\u043a <em>ceil(sqrt(n))<\/em>. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u0431\u044a\u0451\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0435\u0437\u043a\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c.<\/p>\n<pre><code>time scheme --script primes-3.scm 250000 22044  real    0m0.100s<\/code><\/pre>\n<p>\u00ab\u041d\u0443 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0438 \u0432 \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u0440\u043e\u0442\u0430!\u00bb &#8212; \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f, \u0443\u0432\u0438\u0434\u0435\u0432 \u044d\u0442\u043e, \u0438 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0441 <code>realloc<\/code> \u0438\u043b\u0438 GCC \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u041f\u044b\u0442\u0430\u044f\u0441\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0437 \u0442\u043e\u0440\u043c\u043e\u0437\u043e\u0432 <code>realloc<\/code> \u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u043b\u043e\u0433\u0438\u043a\u0443 <strong>primes-2.scm<\/strong> \u043d\u0430 C. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0443 \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0436\u0435 \u0434\u043e\u0431\u0440\u0443. <strong>primes-21.c<\/strong> &#8212; \u043a\u0430\u043b\u044c\u043a\u0430 c <strong>primes-2.scm<\/strong>, \u0441 \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e: \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 cons-\u043f\u0430\u0440\u044b, \u0430 \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 <code>next<\/code>, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445.<\/p>\n<p><strong>primes-21.c<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ primes-21.c                                                                                                                                                  #include &lt;stdio.h>                                                                                                                                           #include &lt;stdlib.h>                                                                                                                                          #include &lt;unistd.h>                                                                                                                                           #define PAGE_CAPACITY 510  typedef struct page {   struct page *restrict next;   long cursor;   long numbers[PAGE_CAPACITY]; } Page;  Page *make_page(const long n) {   Page *const P = malloc(sizeof(Page));   P->next = NULL;   P->cursor = 1;   P->numbers[0] = n;   return P; }  #define likely(X) __builtin_expect((X), 1) \/\/ __  Page *push(Page *restrict const P, const long n) {   if (likely((P->cursor &lt; PAGE_CAPACITY))) {     P->numbers[P->cursor++] = n;     return P;   }   return P->next = make_page(n); }  int is_prime(const Page *restrict const pages, const long n) {   const long l = n \/ 2;   for (const Page *restrict P = pages; P; P = P->next) {     for (int i = 0; i &lt; P->cursor; i++) {       const long p = P->numbers[i];       if (p > l) return 1;       if (n % p == 0) return 0;     }   }   return 1; }  long counting_free(const Page *restrict const pages) {   const Page *restrict P = pages;   long cnt = 0;   while (P) {     const Page *const next = P->next;     cnt += P->cursor;     free((void *)P);     P = next;   }   return cnt; }  int main(int argc, char *argv[]) {   if (argc &lt; 2) {     fprintf(stderr, \"Specify limit\\n\");     return 1;   }    const long N = atol(argv[1]);    Page *restrict const primes = make_page(2);   Page *restrict P = primes;   for (long n = 3; n &lt;= N; n += 2) {     if (is_prime(primes, n)) P = push(P, n);   }   printf(\"%ld\\n\", counting_free(primes));    return 0; } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0418\u0442\u0430\u043a, \u0432\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/p>\n<pre><code>$ gcc -O3 primes-2.c &amp;&amp; time .\/a.out 250000 22044  real    0m0.469s  $ gcc -O3 primes-21.c &amp;&amp; time .\/a.out 250000 22044  real    0m0.464s  $ time scheme --optimize-level 3 --script primes-2.scm 250000 22044  real    0m0.517s <\/code><\/pre>\n<p>\u00ab\u0412\u043e \u0434\u0435\u043b\u0430&#8230;\u00bb \u041a\u043e\u0434 \u043d\u0430 C \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043d\u0430 11% \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 Scheme. \u0418 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 <code>realloc<\/code> \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0441\u0438\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u044b\u043f\u0430\u0441\u0442\u044c \u0438\u0437 \u043a\u044d\u0448\u0435\u0439?<\/p>\n<pre><code>$ gcc -O3 primes-2.c &amp;&amp; time .\/a.out 2500000 183072  real    0m31.376s  $ gcc -O3 primes-21.c &amp;&amp; time .\/a.out 2500000 183072  real    0m31.323s  $ time scheme --optimize-level 3 --script primes-2.scm 2500000 183072  real    0m31.930s  2$ time pypy ..\/1\/primes-1.py 2500000 183072  real    0m32.191s<\/code><\/pre>\n<p>\u041d\u0435\u043c\u0430\u044f \u0441\u0446\u0435\u043d\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0416\u0430\u043d-\u041b\u044e\u043a \u041f\u0438\u043a\u0430\u0440 \u043c\u043e\u043b\u0447\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043b\u0430\u0434\u043e\u043d\u044c \u043a \u043b\u0438\u0446\u0443.<\/p>\n<h2>\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f 3: \u041c\u0430\u043b\u043e\u0432\u0430\u0442\u043e \u0431\u0443\u0434\u0435\u0442.<\/h2>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0432 <em>n\/2<\/em> \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043d\u0435 \u043d\u0430\u0441\u0447\u0438\u0442\u0430\u0435\u0448\u044c. \u041d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u043e <em>isqrt(n)<\/em>. \u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 3 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438\u043c \u0438  \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 2. \u041d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0433\u043e \u0437\u0434\u0435\u0441\u044c, \u043e\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u0432 <a href=\"https:\/\/gist.github.com\/mbakhterev\/85eba67e7adb3597a9633bb7a14ab2ef\" rel=\"noopener noreferrer nofollow\">gist<\/a>.<\/p>\n<p>\u0421 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0434\u043e 25E+6.<\/p>\n<pre><code>$ g++ -O3 primes-3.cpp &amp;&amp; time .\/a.out 25000000                                                                                                              1565927                                                                                                                                                                                                                                                                                                                   real    0m3.726s                                                                                                                                                                                                                                                                                                          $ gcc -O3 primes-3.c &amp;&amp; time .\/a.out 25000000                                                                                                                1565927                                                                                                                                                                                                                                                                                                                   real    0m3.717s                                                                                                                                                                                                                                                                                                          $ gcc -O3 primes-31.c &amp;&amp; time .\/a.out 25000000                                                                                                               1565927                                                                                                                                                                                                                                                                                                                   real    0m3.776s                                                                                                                                                                                                                                                                                                          $ time pypy primes-3.py 25000000                                                                                                                             1565927                                                                                                                                                                                                                                                                                                                   real    0m5.423s                                                                                                                                                                                                                                                                                                          $ time scheme --optimize-level 3 --script primes-3.scm 25000000                                                                                              1565927                                                                                                                                                                                                                                                                                                                   real    0m6.003s                                                                                                                                             <\/code><\/pre>\n<p>\u00ab\u0424\u044c\u044e\u0445!..\u00bb \u041a\u0430\u0440\u0442\u0438\u043d\u0430 \u043c\u0438\u0440\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 C \u0432 1.45 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Python \u0438 \u0432 1.6 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Scheme. \u0425\u043e\u0442\u044f, \u043c\u0430\u043b\u043e\u0432\u0430\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0431\u0443\u0434\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>fixnum-\u044b \u0432 Scheme &#8212; \u043d\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e 64 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u0446\u0435\u043b\u044b\u0435, \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 fixnum-\u0430\u043c\u0438 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u0430\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0430 Scheme \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435;<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0451\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c, \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u044c Clang.<\/p>\n<pre><code>clang --version Debian clang version 11.0.1-2  $ clang -O3 primes-3.c &amp;&amp; time .\/a.out 25000000 1565927  real    0m2.385s  $ clang -O3 primes-31.c &amp;&amp; time .\/a.out 25000000 1565927  real    0m2.388s  $ clang++ -O3 primes-3.cpp &amp;&amp; time .\/a.out 25000000 1565927                                                                                                                                                       real    0m2.448s  $ clang primes-31.c &amp;&amp; time .\/a.out 25000000 1565927  real    0m4.667s  $ clang++ primes-3.cpp &amp;&amp; time .\/a.out 25000000 1565927  real    0m8.583s                                                                                                                                                                                                                                                                                                          $ clang primes-3.c &amp;&amp; time .\/a.out 25000000 1565927                                                                                                                                                                                                                                                                                                                   real    0m4.590s<\/code><\/pre>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u044d\u0442\u043e, \u0432 \u0433\u043b\u0430\u0437\u0430 \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0430 \u0441\u043e\u0440\u0438\u043d\u043a\u0430 \u0442\u043e \u043b\u0438 \u0440\u0430\u0434\u043e\u0441\u0442\u0438, \u0442\u043e \u043b\u0438 \u0440\u0430\u0437\u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e. \u041f\u043e\u0447\u0435\u043c\u0443 GCC \u0432\u044b\u0434\u0430\u0451\u0442 \u0432 1.6<br \/> \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0447\u0435\u043c Clang? \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 C++ \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0443\u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Clang, \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438<br \/> GCC? \u041d\u043e \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u044b\u0447\u0438\u0442\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u0430 \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>Scheme \u0438 Python \u044f\u0437\u044b\u043a\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 (PyPy \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u0438\u043f\u044b, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Python). Scheme \u0441\u043e\u0432\u0441\u0435\u043c-\u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439, \u0432 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043d\u044b: 32 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0438\u043b\u0438 64 \u0431\u0438\u0442\u043e\u0432\u044b\u0445. Fixnum-\u044b &#8212; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u0442\u0438\u043f. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b, \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f <code>lambda<\/code>, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0446\u0438\u043a\u043b\u043e\u0432 (<code>do<\/code> &#8212; \u0442\u043e\u0436\u0435 \u043c\u0430\u043a\u0440\u043e\u0441) \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 (\u043f\u0443\u0441\u0442\u044c \u0438 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u0435).<\/p>\n<p>\u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e, \u0442\u043e, \u0447\u0442\u043e PyPy \u0438 Chez Scheme \u0443\u043c\u0443\u0434\u0440\u044f\u044e\u0442\u0441\u044f \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0447\u0438\u0441\u043b\u043e\u0434\u0440\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0437\u0430\u0434\u0430\u0447\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0432 2.5 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439, \u0447\u0435\u043c \u043a\u043e\u0434, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 3-\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 LLVM (\u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043e \u043d\u0430 \u043f\u0430\u0440\u0443 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0443\u0434\u0430), \u0443\u0434\u0438\u0432\u043b\u044f\u0435\u0442.<\/p>\n<p>\u0414\u043b\u044f \u0441\u0435\u0431\u044f \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0432\u044b\u0432\u043e\u0434: \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 Python \u0438\u043b\u0438 Scheme, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438, \u0438 \u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0435, \u043d\u043e \u0438 \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u044c\u0441\u044f. \u0410 \u0442\u043e, \u0432\u0435\u0434\u044c, \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044f \u043d\u0430 C++, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0430 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439.<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/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\/post\/658829\/\"> https:\/\/habr.com\/ru\/post\/658829\/<\/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_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432\u0430\u0441 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043d\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0440\u0430\u0437\u044b\u0441\u043a\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435, \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: C, C++, Scheme \u0438 Python &#8212; \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u00ab\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0436 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439\u00bb, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u0451\u043c\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Scheme, \u0447\u0442\u043e, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435\u043c \u043d\u0430 \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0441\u0442\u0440\u043e\u0432.<\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e<\/h2>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u043e\u0434\u043d\u0438\u043c \u0442\u043e\u043c\u043d\u044b\u043c \u0432\u0435\u0447\u0435\u0440\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0430 \u0433\u043b\u0430\u0437\u0430 \u043f\u043e\u043f\u0430\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0430\u0432\u0442\u043e\u0440 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0442\u0440\u0438 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: Python, C \u0438  \u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 IA-32 &#8212; \u043f\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0438 \u043f\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u0430\u044f: \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 250000.<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62497f82036a421272cd5670\" data-style=\"\" id=\"62497f82036a421272cd5670\" width=\"\"><\/div>\n<p>\u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0442\u0430\u043a\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 &#8212; \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 &#8212; \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0441\u0440\u0435\u0434\u0438 \u044d\u0442\u0438\u0445 \u0442\u0440\u0451\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0437\u0430\u0439\u043c\u0451\u0442 Scheme. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e Scheme \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>Scheme &#8212; \u044f\u0437\u044b\u043a \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f\u043c\u0438, \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0448\u044c \u043e\u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u044b\u0442\u0438. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0437 \u0432 10 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 Python \u0432 \u0432\u0438\u0434\u0435\u043e. \u0412\u043e\u0442 <a href=\"https:\/\/asciinema.org\/a\/T9xlP7ZO0JxSmakICQJzsSR8Q\" rel=\"noopener noreferrer nofollow\">asciicast<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u0437\u0430\u0442\u0435\u0438.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0443\u0434\u0438\u0432\u0438\u043b (\u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u043d\u0435 \u0442\u043e\u0440\u043e\u043f\u0438\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e <code>sqrt(n)<\/code>; \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0434\u0440\u0430\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430, \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u044d\u0442\u0443 \u0434\u0435\u0442\u0430\u043b\u044c \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a).<\/p>\n<pre><code>time scheme --script primes.scm 22044  real    0m1.408s<\/code><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, Chez Scheme \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 (\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Scheme) \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u0438\u0442 \u0441\u0432\u043e\u0438 \u0446\u0438\u043a\u043b\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u043d\u0430 C \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u0436\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442? \u00ab\u0414\u0430, \u043d\u0443, \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c!\u00bb &#8212; \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f: \u00ab\u041f\u0440\u043e\u0441\u0442\u043e \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u0432\u0438\u0434\u0435\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440.\u00bb \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 \u042f\u043d\u0434\u0435\u043a\u0441 \u0441 \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>cpu<\/code><\/p>\n<\/td>\n<td>\n<p><code>Intel Xeon Processor (Icelake) 1999.995MHz<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>uname -v<\/code><\/p>\n<\/td>\n<td>\n<p><code>#1 SMP Debian 5.10.92-2 (2022-02-28)<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>gcc --version<\/code><\/p>\n<\/td>\n<td>\n<p><code>gcc (Debian 10.2.1-6) 10.2.1 20210110<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>pypy --version<\/code><\/p>\n<\/td>\n<td>\n<p><code>PyPy 7.3.3 with GCC 10.2.1 20210110<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"194\" width=\"194\">\n<p align=\"right\"><code>scheme --version<\/code><\/p>\n<\/td>\n<td>\n<p><code>9.5.4<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043b\u044c\u0448\u0435, \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b <a href=\"https:\/\/gist.github.com\/mbakhterev\/85eba67e7adb3597a9633bb7a14ab2ef\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a><\/p>\n<h2>\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f 0: \u041d\u0435 \u0432\u0435\u0440\u044e!<\/h2>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430 C \u0438 Python, \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u0440\u043e\u043b\u0438\u043a\u0430. \u042f \u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 Python \u0438 C, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u043e\u044f\u0441\u043d\u044f\u0442\u044c.<\/p>\n<p><strong>primes-0.c<\/strong> \u0438 <strong>primes-0.py<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ primes-0.c #include &lt;stdio.h>  int is_prime(int n) {   for(int p = 2; p &lt;= n\/2; p++)     if (!(n % p))       return 0;   return 1; }  void main() {   int n_primes = 0;    for(int n = 2; n &lt; 250001; n++)     n_primes += is_prime(n);    printf(\"%d\\n\", n_primes); }<\/code><\/pre>\n<pre><code class=\"python\"># primes-0.py def is_prime(n):     for p in range(2, n\/\/2 + 1):         if (not (n%p)):             return 0     return 1  n_primes = 0  for i in range(2, 250001):     n_primes += is_prime(i)  print(str(n_primes))<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u043e Scheme, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0437\u043d\u0430\u043a\u043e\u043c\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u043e\u0434.<\/p>\n<pre><code>; primes-0.scm (define (prime? n P) (or (null? P)                          (> (car P) (quotient n 2))                          (and (positive? (remainder n (car P)))                               (prime? n (cdr P)))))  (define primes (cons 2 '()))  (do ((n 3 (+ 2 n))      (P primes (if (not (prime? n primes)) P (begin (set-cdr! P (cons n '())) (cdr P)))))   ((> n 250000) (display (length primes)) (newline)))<\/code><\/pre>\n<p>\u041a\u043e\u0434 <strong>primes-0.scm<\/strong> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439.<\/p>\n<p>\u0427\u0430\u0441\u0442\u044c <strong>\u043f\u0435\u0440\u0432\u0430\u044f<\/strong>. \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <code>prime?<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>#f<\/code> (\u043b\u043e\u0436\u044c), \u0435\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0447\u0438\u0441\u043b\u0430 <code>n<\/code> \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 <code>P<\/code>. \u0412 \u043d\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 Scheme.<\/p>\n<p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>(or E1 ... En)<\/code> \u0438 <code>(and E1 ... En)<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 (short-circuiting). \u0412 C \u0431\u044b \u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>E1 || ... || En<\/code> \u0438 <code>E1 &amp;&amp; ... &amp;&amp; En<\/code>.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043a\u0438 \u0432 Lisp \u0441\u043e \u0441\u0442\u0430\u0440\u043e\u0434\u0430\u0432\u043d\u0438\u0445 \u0432\u0440\u0435\u043c\u0451\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 cons-\u043f\u0430\u0440\u0430\u043c\u0438. Cons \u043e\u0442 constructor: \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (s-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439), \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u044b &#8212; \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043d\u0435\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u0442, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435. \u041f\u0430\u0440\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 (\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0430\u044f, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0442, \u0432 Scheme \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0432\u043d\u043e\u043f\u0440\u0430\u0432\u043d\u044b) <code>cons<\/code>.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 &#8212; \u044d\u0442\u043e \u043f\u0430\u0440\u0430 <em>(\u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432)<\/em>. \u0418\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 <code>L<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <code>e<\/code> \u0432 \u0433\u043e\u043b\u043e\u0432\u0443: <code>(cons e L)<\/code>. \u0421\u043f\u0438\u0441\u043e\u043a <em>[1, 2, 3, 4]<\/em> \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c <code>(cons 1 (cons 2 (cons 3 (cons 4 '()))))<\/code>. \u0417\u0434\u0435\u0441\u044c <code>'()<\/code> &#8212; \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u041f\u0430\u0440\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u0438 \u0432\u0442\u043e\u0440\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b <code>car<\/code> \u0438 <code>cdr<\/code>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u0440 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Lisp \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 IBM 704. <code>car<\/code> &#8212; contents of the address part of the register, <code>cdr<\/code> &#8212; contents of the decrement part of the register. \u041f\u043e\u0434 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e cons-\u043f\u0430\u0440\u0443 &#8212; \u041c\u043e\u0440\u0444\u0435\u0443\u0441 \u0443\u0432\u0438\u0434\u0435\u043b \u0431\u044b \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 <code>L<\/code> &#8212; \u0441\u043f\u0438\u0441\u043e\u043a, \u0442\u043e <code>(car L)<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 <code>L<\/code>, <code>(cdr L)<\/code> &#8212; \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u0430. \u0415\u0441\u043b\u0438 <code>L<\/code> = <em>[1, 2, 3, 4]<\/em>, \u0442\u043e <code>(car L)<\/code> = <em>1<\/em> \u0438 <code>(cdr L)<\/code> = <em>[2, 3, 4]<\/em> = <code>(cons 2 (cons 3 (cons 4 '())))<\/code>.<\/p>\n<p>\u042d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u043d\u043e \u043d\u0430\u043f\u0438\u0448\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443. Scheme (\u043a\u0430\u043a \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u044b Lisp) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 cons-\u044f\u0447\u0435\u0435\u043a \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438 <code>set-car!<\/code> \u0438 <code>set-cdr!<\/code>.<\/p>\n<p>\u041f\u0440\u0438\u043d\u044f\u0432 \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435, \u043a\u043e\u0434 <code>prime?<\/code> <\/p>\n<pre><code>; primes-0.scm                                                                                 (define (prime? n P) (or (null? P)                                                                                      (> (car P) (quotient n 2))                                                                     (and (positive? (remainder n (car P)))                                                              (prime? n (cdr P)))))<\/code><\/pre>\n<p>\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0430\u043a: <code>(prime? n P)<\/code> &#8212; \u0438\u0441\u0442\u0438\u043d\u0430,<\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 <code>(null? P)<\/code> &#8212; \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0442\u043e \u0435\u0441\u043b\u0438 <code>(> (car P) (quotient n 2))<\/code> &#8212; \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0435\u0441\u0442\u044c, \u0442\u043e: <\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u043b\u0438 <code>(positive? (remainder n (car P)))<\/code> &#8212; \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043d\u0435 \u0434\u0435\u043b\u0438\u0442 <code>n<\/code>,<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0442\u043e\u0433\u0434\u0430, \u0435\u0441\u043b\u0438 <code>(prime? n (cdr P))<\/code> &#8212; \u0432 \u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0434\u043b\u044f <code>n<\/code>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 Scheme \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u043e\u0432 <code>(prime? n (cdr P))<\/code> \u0431\u0443\u0434\u0435\u0442 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u043c, \u0442\u043e \u0435\u0441\u0442\u044c, \u0441\u0442\u0435\u043a \u043a\u0430\u0434\u0440\u043e\u0432 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e <code>prime?<\/code> &#8212; \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 <code>n<\/code> \u043e\u0442 3 \u0434\u043e 250000 c \u0448\u0430\u0433\u043e\u043c 2 \u0438, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b <code>primes<\/code>. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>P<\/code> &#8212; \u043a\u0443\u0440\u0441\u043e\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0435\u0446. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0446\u0438\u043a\u043b\u043e\u043c <code>do<\/code> <\/p>\n<pre><code>(do ((V1 I1 U1) ... (Vn In Un))   (C E1 ... Ek)   B1   ...   Bm)<\/code><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0442\u0430\u043a:<\/p>\n<ul>\n<li>\n<p>\u0412 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 <code>do<\/code> \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>V1<\/code>, &#8230;, <code>Vn<\/code>. \u041a\u0430\u0436\u0434\u0430\u044f <code>Vj<\/code> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>Ij<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430 <code>Vj<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>Uj<\/code>. \u0426\u0438\u043a\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>\u0421<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c, \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u0438\u0437 \u0446\u0438\u043a\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>E1<\/code>, &#8230;, <code>Ek<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>do<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <code>Ek<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043b\u0435 \u0446\u0438\u043a\u043b\u0430 <code>B1<\/code>, &#8230;, <code>Bn<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 <code>do<\/code> \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 <strong>primes-0.scm<\/strong><\/p>\n<pre><code>(do ((n 3 (+ 2 n))  (P primes (if (not (prime? n primes)) P (begin (set-cdr! P (cons n '())) (cdr P)))))   ((> n 250000) (display (length primes)) (newline)))<\/code><\/pre>\n<p>\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0430\u043c\u044b\u043c \u043c\u0443\u0434\u0440\u0451\u043d\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f  \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>P<\/code>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e cons-\u043f\u0430\u0440\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 <code>primes<\/code>:<\/p>\n<pre><code>(if (not (prime? n primes)) P (begin (set-cdr! P (cons n '())) (cdr P)))<\/code><\/pre>\n<p>\u0412 \u043d\u0451\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 <code>n<\/code>. \u0415\u0441\u043b\u0438 <code>n<\/code> \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>P<\/code> \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0442\u043e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 cons-\u043f\u0430\u0440\u044b <code>P<\/code> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e cons-\u043f\u0430\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <em>[n]<\/em>. \u042d\u0442\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u043b\u043e\u043a\u0430 <code>begin<\/code> &#8212; <code>(cdr P)<\/code> &#8212; \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>P<\/code>. \u0418\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0446\u0438\u043a\u043b\u0430: <code>P<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e cons-\u043f\u0430\u0440\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 <code>primes<\/code> &#8212; \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<pre><code>$ gcc primes-0.c &amp;&amp; time .\/a.out  22044  real    0m3.854s<\/code><\/pre>\n<p>\u0410\u0432\u0442\u043e\u0440 \u0440\u043e\u043b\u0438\u043a\u0430 \u0433\u0440\u0443\u0431\u043e \u043f\u043e\u0448\u0443\u0442\u0438\u043b \u043d\u0430\u0434 \u043f\u0438\u0442\u043e\u043d\u0438\u0441\u0442\u0430\u043c\u0438, \u0437\u0430\u0431\u044b\u0432 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u044b JIT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c PyPy, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<pre><code>$ time pypy primes-0.py  22044  real    0m4.859s<\/code><\/pre>\n<p>Scheme &#8230;<\/p>\n<pre><code>$ time scheme --script primes-0.scm  22044  real    0m1.468s<\/code><\/pre>\n<p>.. \u0432 2.5 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 C. \u00ab\u041a\u0430\u043a \u0436\u0435 \u0442\u0430\u043a? \u041d\u0435 \u0432\u0435\u0440\u044e! \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442!? \u0412 Debian-\u0432\u0435\u0440\u0441\u0438\u0438 GCC \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438? \u041d\u0430\u0434\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0451.\u00bb &#8212; \u0432\u0435\u0440\u0442\u0435\u043b\u043e\u0441\u044c \u0443 \u043c\u0435\u043d\u044f \u0432 \u0433\u043e\u043b\u043e\u0432\u0435.<\/p>\n<pre><code>$ gcc -O3 primes-0.c &amp;&amp; time .\/a.out  22044  real    0m2.769s<\/code><\/pre>\n<p>\u00ab\u0414\u0430 \u0447\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435!?\u00bb &#8212; \u0432\u043e\u043f\u0440\u043e\u0448\u0430\u043b \u043c\u043e\u0439 \u0443\u0436\u0435 \u0441\u043b\u0435\u0433\u043a\u0430 \u0432\u043e\u0441\u043f\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0443\u043c. \u041d\u043e \u0440\u0430\u0437 \u0432 \u0445\u043e\u0434 \u043f\u043e\u0448\u043b\u0430 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u0442\u043e, \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Scheme.<\/p>\n<p><strong>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445<\/strong>, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u044e \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u043d\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0441 fixnum-\u0430\u043c\u0438. \u0412 Lisp fixnum-\u0430\u043c\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0431\u0435\u0437 boxing-\u0430, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c.<\/p>\n<p><strong>primes-fx-0.scm<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">; primes-fx-0.scm (define (prime? n P) (or (null? P)                          (fx> (car P) (fxquotient n 2))                          (and (fxpositive? (fxremainder n (car P)))                               (prime? n (cdr P)))))  (define primes (cons 2 '()))  (do ((n 3 (fx+ 2 n))      (P primes (if (prime? n primes) (begin (set-cdr! P (cons n '())) (cdr P)) P)))   ((fx> n 250000) (display (length primes)) (newline)))<\/code><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445<\/strong>, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435 \u0442\u044f\u0436\u043a\u0438\u0435.<\/p>\n<pre><code>$ time scheme --optimize-level 3 --script primes-fx-0.scm  22044  real    0m0.538s<\/code><\/pre>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 C, \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 5 \u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 Scheme (\u044f\u0437\u044b\u043a\u0435 \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430), \u0432\u043e\u0432\u0441\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441 \u0446\u0438\u043a\u043b\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438!?<\/p>\n<p>\u0412\u0435\u0447\u0435\u0440 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u0440\u044f\u043b \u0441\u0432\u043e\u044e \u0442\u043e\u043c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h2>\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f 1: \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0437\u0438\u0440\u0443\u0439 \u044d\u0442\u043e!<\/h2>\n<p>\u042f \u0431\u044b\u043b \u0433\u043e\u0442\u043e\u0432 \u043a<\/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-331437","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/331437","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=331437"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/331437\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=331437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=331437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=331437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}